diff --git a/bin/configs/spring-boot-beanvalidation-no-nullable-oas3.yaml b/bin/configs/spring-boot-beanvalidation-no-nullable-oas3.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..760305ec6cbf876fba11939e1550a7901a53d598
--- /dev/null
+++ b/bin/configs/spring-boot-beanvalidation-no-nullable-oas3.yaml
@@ -0,0 +1,13 @@
+generatorName: spring
+outputDir: samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable
+library: spring-boot
+inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml
+templateDir: modules/openapi-generator/src/main/resources/JavaSpring
+additionalProperties:
+  groupId: org.openapitools.openapi3
+  oas3: "true"
+  java8: "false"
+  useBeanValidation: true
+  artifactId: spring-boot-beanvalidation-no-nullable
+  hideGenerationTimestamp: "true"
+  openApiNullable: "false"
diff --git a/bin/configs/spring-boot-delegate-oas3.yaml b/bin/configs/spring-boot-delegate-oas3.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..7d8631523d8ab8fe132a25ca322ae604f9a3e452
--- /dev/null
+++ b/bin/configs/spring-boot-delegate-oas3.yaml
@@ -0,0 +1,11 @@
+generatorName: spring
+outputDir: samples/openapi3/server/petstore/springboot-delegate
+inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml
+templateDir: modules/openapi-generator/src/main/resources/JavaSpring
+additionalProperties:
+  groupId: org.openapitools.openapi3
+  oas3: "true"
+  artifactId: springboot-delegate
+  hideGenerationTimestamp: "true"
+  java8: true
+  delegatePattern: "true"
diff --git a/bin/configs/spring-boot-implicitHeaders-oas3.yaml b/bin/configs/spring-boot-implicitHeaders-oas3.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..973561fad57e49dca3ea735620bbf7cd672d6f4d
--- /dev/null
+++ b/bin/configs/spring-boot-implicitHeaders-oas3.yaml
@@ -0,0 +1,10 @@
+generatorName: spring
+outputDir: samples/openapi3/server/petstore/springboot-implicitHeaders
+inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml
+templateDir: modules/openapi-generator/src/main/resources/JavaSpring
+additionalProperties:
+  groupId: org.openapitools.openapi3
+  oas3: "true"
+  artifactId: springboot-implicitHeaders
+  hideGenerationTimestamp: "true"
+  implicitHeaders: true
diff --git a/bin/configs/spring-boot-oas3.yaml b/bin/configs/spring-boot-oas3.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..9a0f864b2713f36e8ee616f50f205194e16b5e0b
--- /dev/null
+++ b/bin/configs/spring-boot-oas3.yaml
@@ -0,0 +1,10 @@
+generatorName: spring
+outputDir: samples/openapi3/server/petstore/springboot
+inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml
+templateDir: modules/openapi-generator/src/main/resources/JavaSpring
+additionalProperties:
+  groupId: org.openapitools.openapi3
+  artifactId: springboot
+  snapshotVersion: "true"
+  oas3: "true"
+  hideGenerationTimestamp: "true"
diff --git a/bin/configs/spring-boot-reactive-oas3.yaml b/bin/configs/spring-boot-reactive-oas3.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..b3fc8278491ab2d257c3936b0c4642c3c9744b5e
--- /dev/null
+++ b/bin/configs/spring-boot-reactive-oas3.yaml
@@ -0,0 +1,11 @@
+generatorName: spring
+outputDir: samples/openapi3/server/petstore/springboot-reactive
+inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml
+templateDir: modules/openapi-generator/src/main/resources/JavaSpring
+additionalProperties:
+  groupId: org.openapitools.openapi3
+  oas3: "true"
+  artifactId: springboot-reactive
+  reactive: "true"
+  hideGenerationTimestamp: "true"
+  delegatePattern: "true"
diff --git a/bin/configs/spring-boot-useoptional-oas3.yaml b/bin/configs/spring-boot-useoptional-oas3.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..6fd5755ca31c899bc93c7ef2356f4c1b36d6e462
--- /dev/null
+++ b/bin/configs/spring-boot-useoptional-oas3.yaml
@@ -0,0 +1,10 @@
+generatorName: spring
+outputDir: samples/openapi3/server/petstore/springboot-useoptional
+inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml
+templateDir: modules/openapi-generator/src/main/resources/JavaSpring
+additionalProperties:
+  groupId: org.openapitools.openapi3
+  oas3: "true"
+  useOptional: true
+  artifactId: spring-boot-useoptional
+  hideGenerationTimestamp: "true"
diff --git a/bin/configs/spring-cloud-async-oas3.yaml b/bin/configs/spring-cloud-async-oas3.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..637e9b4d1626f2d929bea0bdea7f7fa1c2ba60a5
--- /dev/null
+++ b/bin/configs/spring-cloud-async-oas3.yaml
@@ -0,0 +1,12 @@
+generatorName: spring
+outputDir: samples/openapi3/client/petstore/spring-cloud-async
+library: spring-cloud
+inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore.yaml
+templateDir: modules/openapi-generator/src/main/resources/JavaSpring
+additionalProperties:
+  groupId: org.openapitools.openapi3
+  oas3: "true"
+  async: "true"
+  java8: "true"
+  artifactId: petstore-spring-cloud
+  hideGenerationTimestamp: "true"
diff --git a/bin/configs/spring-cloud-date-time-oas3.yaml b/bin/configs/spring-cloud-date-time-oas3.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..27cd8723133e364a72d6ed7cc58736ab3acab798
--- /dev/null
+++ b/bin/configs/spring-cloud-date-time-oas3.yaml
@@ -0,0 +1,12 @@
+generatorName: spring
+library: spring-cloud
+outputDir: samples/openapi3/client/petstore/spring-cloud-date-time
+inputSpec: modules/openapi-generator/src/test/resources/3_0/spring/date-time-parameter-types-for-testing.yml
+templateDir: modules/openapi-generator/src/main/resources/JavaSpring
+additionalProperties:
+  groupId: org.openapitools.openapi3
+  artifactId: spring-cloud-date-time-oas3
+  interfaceOnly: "true"
+  singleContentTypes: "true"
+  hideGenerationTimestamp: "true"
+  oas3: "true"
\ No newline at end of file
diff --git a/bin/configs/spring-cloud-date-time.yaml b/bin/configs/spring-cloud-date-time.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..16686c8b9ac71c60829a55192f2b4e3e6a016c86
--- /dev/null
+++ b/bin/configs/spring-cloud-date-time.yaml
@@ -0,0 +1,10 @@
+generatorName: spring
+library: spring-cloud
+outputDir: samples/client/petstore/spring-cloud-date-time
+inputSpec: modules/openapi-generator/src/test/resources/3_0/spring/date-time-parameter-types-for-testing.yml
+templateDir: modules/openapi-generator/src/main/resources/JavaSpring
+additionalProperties:
+  artifactId: spring-cloud-date-time
+  interfaceOnly: "true"
+  singleContentTypes: "true"
+  hideGenerationTimestamp: "true"
\ No newline at end of file
diff --git a/bin/configs/spring-cloud-oas3-fakeapi.yaml b/bin/configs/spring-cloud-oas3-fakeapi.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f12e8b601991fcceb072df582cc34429591bcc9e
--- /dev/null
+++ b/bin/configs/spring-cloud-oas3-fakeapi.yaml
@@ -0,0 +1,12 @@
+generatorName: spring
+library: spring-cloud
+outputDir: samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi
+inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml
+templateDir: modules/openapi-generator/src/main/resources/JavaSpring
+additionalProperties:
+  groupId: org.openapitools.openapi3
+  artifactId: spring-cloud-oas3
+  interfaceOnly: "true"
+  singleContentTypes: "true"
+  hideGenerationTimestamp: "true"
+  oas3: "true"
diff --git a/bin/configs/spring-cloud-oas3.yaml b/bin/configs/spring-cloud-oas3.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3d627dcca25459de0405dde7fabe992874332f03
--- /dev/null
+++ b/bin/configs/spring-cloud-oas3.yaml
@@ -0,0 +1,12 @@
+generatorName: spring
+library: spring-cloud
+outputDir: samples/openapi3/client/petstore/spring-cloud
+inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml
+templateDir: modules/openapi-generator/src/main/resources/JavaSpring
+additionalProperties:
+  groupId: org.openapitools.openapi3
+  artifactId: spring-cloud-oas3
+  interfaceOnly: "true"
+  singleContentTypes: "true"
+  hideGenerationTimestamp: "true"
+  oas3: "true"
diff --git a/bin/configs/spring-cloud-petstore-feign-spring-pageable-oas3.yaml b/bin/configs/spring-cloud-petstore-feign-spring-pageable-oas3.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..64f048226e83dd0487f8bea43e9ef09c4c1299e3
--- /dev/null
+++ b/bin/configs/spring-cloud-petstore-feign-spring-pageable-oas3.yaml
@@ -0,0 +1,10 @@
+generatorName: spring
+outputDir: samples/openapi3/client/petstore/spring-cloud-spring-pageable
+library: spring-cloud
+inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-spring-pageable.yaml
+templateDir: modules/openapi-generator/src/main/resources/JavaSpring
+additionalProperties:
+  groupId: org.openapitools.openapi3
+  oas3: "true"
+  artifactId: spring-cloud-spring-pageable
+  hideGenerationTimestamp: 'true'
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java
index 297c458e3c23add56c0fcbe8b618024d9afb9744..f2695d08cd2120c78576c189d49dcf022686cbd4 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java
@@ -20,6 +20,7 @@ package org.openapitools.codegen.languages;
 import static org.apache.commons.lang3.StringUtils.isNotEmpty;
 import static org.openapitools.codegen.utils.StringUtils.camelize;
 
+import io.swagger.v3.oas.models.media.Schema;
 import java.io.File;
 import java.net.URL;
 import java.util.ArrayList;
@@ -923,6 +924,17 @@ public class SpringCodegen extends AbstractJavaCodegen
         }
     }
 
+    @Override
+    public CodegenModel fromModel(String name, Schema model) {
+        CodegenModel codegenModel = super.fromModel(name, model);
+        if (oas3) {
+            // remove swagger2 imports
+            codegenModel.imports.remove("ApiModelProperty");
+            codegenModel.imports.remove("ApiModel");
+        }
+        return codegenModel;
+    }
+
     @Override
     public Map<String, Object> postProcessModelsEnum(Map<String, Object> objs) {
         objs = super.postProcessModelsEnum(objs);
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/allowableValues.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/allowableValues.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..1cba2038d870db800d783183e72c05070557142a
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/allowableValues.mustache
@@ -0,0 +1 @@
+{{#allowableValues}}allowableValues ={{#oas3}} { {{#values}}"{{{.}}}"{{^-last}}, {{/-last}}{{/values}} }{{/oas3}}{{^oas3}} "{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{#-last}}{{/-last}}{{/values}}"{{/oas3}}{{/allowableValues}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/api.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/api.mustache
index 6647b5f084e518819481499fb52d90d3c667622e..66c398753e04396fa9c9f98f56f112744edec758 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/api.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/api.mustache
@@ -10,9 +10,9 @@ package {{package}};
 {{#oas3}}
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
-import io.swagger.v3.oas.annotations.parameters.RequestBody;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.security.SecurityRequirement;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -120,29 +120,62 @@ public interface {{classname}} {
     @ApiVirtual
     {{/virtualService}}
     {{#oas3}}
-    @Operation(summary = "{{{summary}}}", tags={ {{#vendorExtensions.x-tags}}"{{tag}}",{{/vendorExtensions.x-tags}} }, responses = { {{#responses}} @ApiResponse(responseCode = "{{{code}}}", description = "{{{message}}}"{{#baseType}}, content = @Content(mediaType = "application/json", schema = @Schema(implementation =  {{{baseType}}}.class)){{/baseType}}){{^-last}},{{/-last}}{{/responses}} }{{#hasAuthMethods}},security = {
-        {{#authMethods}}@SecurityRequirement(name = "{{name}}"{{#isOAuth}}, scopes={ {{#scopes}}"{{scope}}"{{^-last}}, {{/-last}}{{/scopes}} }{{/isOAuth}}){{^-last}},{{/-last}}{{/authMethods}} } {{/hasAuthMethods}})
-    {{/oas3}}{{^oas3}}
-    @ApiOperation(value = "{{{summary}}}", nickname = "{{{operationId}}}", notes = "{{{notes}}}"{{#returnBaseType}}, response = {{{.}}}.class{{/returnBaseType}}{{#returnContainer}}, responseContainer = "{{{.}}}"{{/returnContainer}}{{#hasAuthMethods}}, authorizations = {
-        {{#authMethods}}{{#isOAuth}}@Authorization(value = "{{name}}", scopes = {
-            {{#scopes}}@AuthorizationScope(scope = "{{scope}}", description = "{{description}}"){{^-last}},
-            {{/-last}}{{/scopes}} }){{^-last}},{{/-last}}{{/isOAuth}}
-        {{^isOAuth}}@Authorization(value = "{{name}}"){{^-last}},{{/-last}}
-        {{/isOAuth}}{{/authMethods}} }{{/hasAuthMethods}}, tags={ {{#vendorExtensions.x-tags}}"{{tag}}",{{/vendorExtensions.x-tags}} })
-    @ApiResponses(value = { {{#responses}}
-
-        @ApiResponse(code = {{{code}}}, message = "{{{message}}}"{{#baseType}}, response = {{{.}}}.class{{/baseType}}{{#containerType}}, responseContainer = "{{{.}}}"{{/containerType}}){{^-last}},{{/-last}}{{/responses}} })
+    @Operation(
+        summary = "{{{summary}}}",
+        tags = { {{#vendorExtensions.x-tags}}"{{tag}}"{{^-last}}, {{/-last}}{{/vendorExtensions.x-tags}} },
+        responses = {
+            {{#responses}}
+            @ApiResponse(responseCode = "{{{code}}}", description = "{{{message}}}"{{#baseType}}, content = @Content(mediaType = "application/json", schema = @Schema(implementation =  {{{baseType}}}.class)){{/baseType}}){{^-last}},{{/-last}}
+            {{/responses}}
+        }{{#hasAuthMethods}},
+        security = {
+            {{#authMethods}}
+            @SecurityRequirement(name = "{{name}}"{{#isOAuth}}, scopes={ {{#scopes}}"{{scope}}"{{^-last}}, {{/-last}}{{/scopes}} }{{/isOAuth}}){{^-last}},{{/-last}}
+            {{/authMethods}}
+        }{{/hasAuthMethods}}
+    )
+    {{/oas3}}
+    {{^oas3}}
+    @ApiOperation(
+        tags = { {{#vendorExtensions.x-tags}}"{{tag}}"{{^-last}}, {{/-last}}{{/vendorExtensions.x-tags}} },
+        value = "{{{summary}}}",
+        nickname = "{{{operationId}}}",
+        notes = "{{{notes}}}"{{#returnBaseType}},
+        response = {{{.}}}.class{{/returnBaseType}}{{#returnContainer}},
+        responseContainer = "{{{.}}}"{{/returnContainer}}{{#hasAuthMethods}},
+        authorizations = {
+        {{#authMethods}}
+        {{#isOAuth}}
+            @Authorization(value = "{{name}}", scopes = {
+            {{#scopes}}
+                @AuthorizationScope(scope = "{{scope}}", description = "{{description}}"){{^-last}},{{/-last}}
+            {{/scopes}}
+            }){{^-last}},{{/-last}}
+        {{/isOAuth}}
+        {{^isOAuth}}
+            @Authorization(value = "{{name}}"){{^-last}},{{/-last}}
+        {{/isOAuth}}
+        {{/authMethods}} }{{/hasAuthMethods}}
+    )
+    @ApiResponses({
+        {{#responses}}
+        @ApiResponse(code = {{{code}}}, message = "{{{message}}}"{{#baseType}}, response = {{{.}}}.class{{/baseType}}{{#containerType}}, responseContainer = "{{{.}}}"{{/containerType}}){{^-last}},{{/-last}}
+        {{/responses}}
+    })
     {{/oas3}}
     {{#implicitHeaders}}
     {{#oas3}}
     @Parameters({
+        {{#headerParams}}
+        {{>paramDoc}}{{^-last}},{{/-last}}
+        {{/headerParams}}
     {{/oas3}}
     {{^oas3}}
     @ApiImplicitParams({
+        {{#headerParams}}
+        {{>implicitHeader}}{{^-last}},{{/-last}}
+        {{/headerParams}}
     {{/oas3}}
-    {{#headerParams}}
-    {{>implicitHeader}}
-    {{/headerParams}}
     })
     {{/implicitHeaders}}
     @RequestMapping(
@@ -153,13 +186,18 @@ public interface {{classname}} {
         produces = { {{#produces}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/produces}} }{{/hasProduces}}{{#hasConsumes}},
         consumes = { {{#consumes}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/consumes}} }{{/hasConsumes}}{{/singleContentTypes}}
     )
-    {{#jdk8-default-interface}}default {{/jdk8-default-interface}}{{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{#delegate-method}}_{{/delegate-method}}{{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{>cookieParams}}{{^-last}},{{/-last}}{{#-last}}{{#reactive}}, {{/reactive}}{{/-last}}{{/allParams}}{{#reactive}}{{#oas3}}@Hidden{{/oas3}}{{^oas3}}@springfox.documentation.annotations.ApiIgnore{{/oas3}} final ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, {{#oas3}}@Hidden{{/oas3}}{{^oas3}}@springfox.documentation.annotations.ApiIgnore{{/oas3}} final org.springframework.data.domain.Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}}{{#unhandledException}} throws Exception{{/unhandledException}} {
+    {{#jdk8-default-interface}}default {{/jdk8-default-interface}}{{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{#delegate-method}}_{{/delegate-method}}{{operationId}}(
+        {{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{>cookieParams}}{{^-last}},
+        {{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}},
+        {{/hasParams}}{{#oas3}}@Parameter(hidden = true){{/oas3}}{{#useSpringfox}}@springfox.documentation.annotations.ApiIgnore{{/useSpringfox}} final ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}},
+        {{/hasParams}}{{#useSpringfox}}@springfox.documentation.annotations.ApiIgnore {{/useSpringfox}}final org.springframework.data.domain.Pageable pageable{{/vendorExtensions.x-spring-paginated}}
+    ){{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}}{{#unhandledException}} throws Exception{{/unhandledException}} {
         {{#delegate-method}}
         return {{operationId}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, pageable{{/vendorExtensions.x-spring-paginated}});
     }
 
     // Override this method
-    {{#jdk8-default-interface}}default {{/jdk8-default-interface}} {{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{^isFile}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{#isBodyParam}}{{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}}{{/isBodyParam}}{{/isFile}}{{#isFile}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}{{#oas3}}@Hidden{{/oas3}}{{^oas3}}@springfox.documentation.annotations.ApiIgnore{{/oas3}} final ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, {{#oas3}}@Hidden{{/oas3}}{{^oas3}}@springfox.documentation.annotations.ApiIgnore{{/oas3}} final org.springframework.data.domain.Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}} {
+    {{#jdk8-default-interface}}default {{/jdk8-default-interface}} {{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{^isFile}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{#isBodyParam}}{{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}}{{/isBodyParam}}{{/isFile}}{{#isFile}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}}, {{/hasParams}}{{#useSpringfox}}@springfox.documentation.annotations.ApiIgnore{{/useSpringfox}} final ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, {{#useSpringfox}}@springfox.documentation.annotations.ApiIgnore{{/useSpringfox}} final org.springframework.data.domain.Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}} {
         {{/delegate-method}}
         {{^isDelegate}}
         {{>methodBody}}
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/apiController.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/apiController.mustache
index cfdf2b9772bd175ce9959b7500961bd0ff04a30a..0652a76d54ee91679e8f69b6cda5ea07ca3ac016 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/apiController.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/apiController.mustache
@@ -3,7 +3,18 @@ package {{package}};
 {{^jdk8}}
 {{#imports}}import {{import}};
 {{/imports}}
+{{#oas3}}
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+{{/oas3}}
+{{^oas3}}
 import io.swagger.annotations.*;
+{{/oas3}}
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
@@ -118,7 +129,11 @@ public class {{classname}}Controller implements {{classname}} {
     {{/externalDocs}}
      * @see {{classname}}#{{operationId}}
      */
-    public {{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{>cookieParams}}{{^-last}},{{/-last}}{{/allParams}}{{#vendorExtensions.x-spring-paginated}}, @springfox.documentation.annotations.ApiIgnore final Pageable pageable{{/vendorExtensions.x-spring-paginated}}) {
+    public {{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}(
+        {{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{>cookieParams}}{{^-last}},
+        {{/-last}}{{/allParams}}{{#vendorExtensions.x-spring-paginated}}{{#hasParams}},
+        {{/hasParams}}{{#useSpringfox}}@springfox.documentation.annotations.ApiIgnore {{/useSpringfox}}final Pageable pageable{{/vendorExtensions.x-spring-paginated}}
+    ) {
     {{^isDelegate}}
         {{^async}}
         {{>methodBody}}
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/apiDelegate.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/apiDelegate.mustache
index ca990e7146b88880eea9fe1a1c74404922221bb2..1a97106dc8fb9fba0107464ebf6c8614138445d8 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/apiDelegate.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/apiDelegate.mustache
@@ -2,7 +2,6 @@ package {{package}};
 
 {{#imports}}import {{import}};
 {{/imports}}
-import io.swagger.annotations.*;
 {{#vendorExtensions.x-spring-paginated}}
 import org.springframework.data.domain.Pageable;
 {{/vendorExtensions.x-spring-paginated}}
@@ -73,7 +72,7 @@ public interface {{classname}}Delegate {
      */
     {{#jdk8-default-interface}}default {{/jdk8-default-interface}}{{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}({{#allParams}}{{^isFile}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{#isBodyParam}}{{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}}{{/isBodyParam}}{{/isFile}}{{#isFile}}{{#isArray}}List<{{/isArray}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isArray}}>{{/isArray}}{{/isFile}} {{paramName}}{{^-last}},
         {{/-last}}{{/allParams}}{{#reactive}}{{#hasParams}},
-        {{/hasParams}}ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, final Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}}{{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}} {
+        {{/hasParams}}ServerWebExchange exchange{{/reactive}}{{#vendorExtensions.x-spring-paginated}}, final org.springframework.data.domain.Pageable pageable{{/vendorExtensions.x-spring-paginated}}){{#unhandledException}} throws Exception{{/unhandledException}}{{^jdk8-default-interface}};{{/jdk8-default-interface}}{{#jdk8-default-interface}} {
         {{>methodBody}}
     }{{/jdk8-default-interface}}
 
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/bodyParams.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/bodyParams.mustache
index 7500b53a1bd1fade2b8ac7f026287c3f1d42b186..137c4d86b7a3333ecdc1ea35d115814149c298a3 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/bodyParams.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/bodyParams.mustache
@@ -1 +1 @@
-{{#isBodyParam}}{{#oas3}}@Parameter(name ={{/oas3}}{{^oas3}}@ApiParam(value ={{/oas3}} "{{{description}}}"{{#required}}, required = true{{/required}} {{^isContainer}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}{{/isContainer}}{{#allowableValues}}, {{#oas3}}schema = @Schema({{/oas3}}allowableValues = "{{{.}}}"{{#oas3}}){{/oas3}}{{/allowableValues}})  {{#useBeanValidation}} @Valid{{/useBeanValidation}} @RequestBody{{^required}}(required = false){{/required}} {{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}} {{paramName}}{{/isBodyParam}}
\ No newline at end of file
+{{#isBodyParam}}{{>paramDoc}}{{#useBeanValidation}} @Valid{{/useBeanValidation}} @RequestBody{{^required}}(required = false){{/required}} {{^reactive}}{{{dataType}}}{{/reactive}}{{#reactive}}{{^isArray}}Mono<{{{dataType}}}>{{/isArray}}{{#isArray}}Flux<{{{baseType}}}>{{/isArray}}{{/reactive}} {{paramName}}{{/isBodyParam}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/cookieParams.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/cookieParams.mustache
index d6bded4b731aa75c12d506ac650c33a34791ce79..a4fe15cb9c2a0d2bc0064e54e92423906f23baeb 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/cookieParams.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/cookieParams.mustache
@@ -1 +1 @@
-{{#isCookieParam}}{{#useBeanValidation}}{{>beanValidationQueryParams}}{{/useBeanValidation}}{{#oas3}}@Parameter(name = "{{{baseName}}}", description = {{/oas3}}{{^oas3}}@ApiParam(value = {{/oas3}}"{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}, allowableValues = "{{#enumVars}}{{#lambdaEscapeDoubleQuote}}{{{value}}}{{/lambdaEscapeDoubleQuote}}{{^-last}}, {{/-last}}{{#-last}}{{/-last}}{{/enumVars}}"{{/allowableValues}}{{^isContainer}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}{{/isContainer}}) @CookieValue("{{baseName}}") {{>optionalDataType}} {{paramName}}{{/isCookieParam}}
\ No newline at end of file
+{{#isCookieParam}}{{#useBeanValidation}}{{>beanValidationQueryParams}}{{/useBeanValidation}}{{>paramDoc}} @CookieValue("{{baseName}}"){{>dateTimeParam}} {{>optionalDataType}} {{paramName}}{{/isCookieParam}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/dateTimeParam.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/dateTimeParam.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..3155e5619566d5d68c47b758e761beee0c3ada92
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/dateTimeParam.mustache
@@ -0,0 +1 @@
+{{#isDate}} @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE){{/isDate}}{{#isDateTime}} @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME){{/isDateTime}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/formParams.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/formParams.mustache
index 78df4981339e1e514b0cb9d67bb0fc36a085ebd2..ec6cac87c51d744d9a4aeebb150f12c2061f3e07 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/formParams.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/formParams.mustache
@@ -1 +1 @@
-{{#isFormParam}}{{^isFile}}{{#oas3}}@Parameter(name = "{{{baseName}}}", description = {{/oas3}}{{^oas3}}@ApiParam(value = {{/oas3}}"{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}, allowableValues = "{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{#-last}}{{/-last}}{{/values}}"{{/allowableValues}}{{^isContainer}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}{{/isContainer}}) {{#useBeanValidation}}@Valid{{/useBeanValidation}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{{dataType}}} {{paramName}}{{/isFile}}{{#isFile}}{{#oas3}}@Parameter(name = "{{{baseName}}}", description = {{/oas3}}{{^oas3}}@ApiParam(value = {{/oas3}}"{{{description}}}") {{#useBeanValidation}}@Valid{{/useBeanValidation}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#isArray}}List<{{/isArray}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isArray}}>{{/isArray}} {{baseName}}{{/isFile}}{{/isFormParam}}
\ No newline at end of file
+{{#isFormParam}}{{^isFile}}{{>paramDoc}}{{#useBeanValidation}} @Valid{{/useBeanValidation}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}){{>dateTimeParam}} {{{dataType}}} {{paramName}}{{/isFile}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#isArray}}List<{{/isArray}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isArray}}>{{/isArray}} {{baseName}}{{/isFile}}{{/isFormParam}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/headerParams.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/headerParams.mustache
index 4b10916d66d4acfa4e28dcfced948b533e53d64f..54891a27d570f35b52b409b7dc4440cb2bff8b48 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/headerParams.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/headerParams.mustache
@@ -1 +1 @@
-{{#isHeaderParam}}{{#oas3}}@Parameter(description ={{/oas3}}{{^oas3}}@ApiParam(value ={{/oas3}} "{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}, allowableValues = "{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{#-last}}{{/-last}}{{/values}}"{{/allowableValues}}{{^isContainer}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}{{/isContainer}}) @RequestHeader(value = "{{baseName}}", required = {{#required}}true{{/required}}{{^required}}false{{/required}}) {{>optionalDataType}} {{paramName}}{{/isHeaderParam}}
+{{#isHeaderParam}}{{>paramDoc}} @RequestHeader(value = "{{baseName}}", required = {{#required}}true{{/required}}{{^required}}false{{/required}}){{>dateTimeParam}} {{>optionalDataType}} {{paramName}}{{/isHeaderParam}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/implicitHeader.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/implicitHeader.mustache
index a7a6851cb887c4c4de55d00026dadea3192b6847..77e151eedaa6ebb4ac0f929be5717c3eaedf7638 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/implicitHeader.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/implicitHeader.mustache
@@ -1 +1 @@
-{{#isHeaderParam}}@ApiImplicitParam(name = "{{{paramName}}}", value = "{{{description}}}", {{#required}}required = true,{{/required}} dataType = "{{{dataType}}}", paramType = "header"){{^-last}},{{/-last}}{{/isHeaderParam}}
\ No newline at end of file
+{{#isHeaderParam}}@ApiImplicitParam(name = "{{{paramName}}}", value = "{{{description}}}", {{#required}}required = true,{{/required}} dataType = "{{{dataType}}}", paramType = "header"){{/isHeaderParam}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache
index 2f75d1c0f63b4789ac2ece8c241e7c573ea7a5e2..05447fe9563d22fddd26dafeee4e5b167b8a1331 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache
@@ -10,7 +10,10 @@
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
         {{#useSpringfox}}
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
+        {{/useSpringfox}}
+        {{^useSpringfox}}
+        <swagger-core-version>{{#oas3}}2.1.11{{/oas3}}{{^oas3}}1.6.3{{/oas3}}</swagger-core-version>
         {{/useSpringfox}}
     </properties>
 {{#parentOverridden}}
@@ -24,7 +27,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>{{#java8}}2.3.3.RELEASE{{/java8}}{{^java8}}1.5.12.RELEASE{{/java8}}</version>
+        <version>2.5.8</version>
     </parent>
 {{/parentOverridden}}
     <build>
@@ -34,13 +37,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
             {{#apiFirst}}
             <plugin>
@@ -91,43 +87,25 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
-        </dependency>
-        <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <version>${springfox.version}</version>
         </dependency>
         {{/useSpringfox}}
         {{^useSpringfox}}
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>2.8.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.webjars</groupId>
-            <artifactId>swagger-ui</artifactId>
-            <version>3.14.2</version>
-        </dependency>
         {{#oas3}}
         <dependency>
             <groupId>io.swagger.core.v3</groupId>
             <artifactId>swagger-annotations</artifactId>
-            <version>2.1.2</version>
+            <version>${swagger-core-version}</version>
         </dependency>
         {{/oas3}}
         {{^oas3}}
         <dependency>
             <groupId>io.swagger</groupId>
             <artifactId>swagger-annotations</artifactId>
-            <version>1.5.14</version>
+            <version>${swagger-core-version}</version>
         </dependency>
         {{/oas3}}
+        {{/useSpringfox}}
         <!-- @Nullable annotation -->
         <dependency>
             <groupId>com.google.code.findbugs</groupId>
@@ -138,9 +116,12 @@
             <groupId>com.fasterxml.jackson.dataformat</groupId>
             <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
-        {{/useSpringfox}}
         {{#withXml}}
         <!-- XML processing: Jackson -->
+        <dependency>
+          <groupId>jakarta.xml.bind</groupId>
+          <artifactId>jakarta.xml.bind-api</artifactId>
+        </dependency>
         <dependency>
           <groupId>com.fasterxml.jackson.dataformat</groupId>
           <artifactId>jackson-dataformat-xml</artifactId>
@@ -162,21 +143,21 @@
         <dependency>
             <groupId>com.github.joschi.jackson</groupId>
             <artifactId>jackson-datatype-threetenbp</artifactId>
-            <version>2.8.4</version>
+            <version>2.9.10</version>
         </dependency>
         {{/threetenbp}}
         {{#openApiNullable}}
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
         {{/openApiNullable}}
 {{#useBeanValidation}}
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
 {{/useBeanValidation}}
 {{#virtualService}}
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-cloud/formParams.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-cloud/formParams.mustache
index ac337fecf6a881df089026c95cded16f9daead9a..2277efda1e1d89f24f0c2a11213873dabbe841e0 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-cloud/formParams.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-cloud/formParams.mustache
@@ -1 +1 @@
-{{#isFormParam}}{{^isFile}}{{#oas3}}@Parameter(name = "{{{baseName}}}", description = {{/oas3}}{{^oas3}}@ApiParam(value = {{/oas3}}"{{{description}}}"{{#required}}, required=true{{/required}} {{#allowableValues}}, allowableValues="{{{.}}}"{{/allowableValues}}{{^isContainer}}{{#defaultValue}}, defaultValue="{{{.}}}"{{/defaultValue}}{{/isContainer}}) @RequestParam(value="{{baseName}}"{{#required}}, required=true{{/required}}{{^required}}, required=false{{/required}})  {{{dataType}}} {{paramName}}{{/isFile}}{{#isFile}}{{#oas3}}@Parameter(name = "{{{baseName}}}", description = {{/oas3}}{{^oas3}}@ApiParam(value = {{/oas3}}"{{{description}}}") @RequestParam("{{baseName}}") {{#isArray}}List<{{/isArray}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isArray}}>{{/isArray}} {{paramName}}{{/isFile}}{{/isFormParam}}
\ No newline at end of file
+{{#isFormParam}}{{^isFile}}{{>paramDoc}} @RequestParam(value="{{baseName}}"{{#required}}, required=true{{/required}}{{^required}}, required=false{{/required}}){{>dateTimeParam}} {{{dataType}}} {{paramName}}{{/isFile}}{{#isFile}}{{>paramDoc}} @RequestParam("{{baseName}}") {{#isArray}}List<{{/isArray}}{{#reactive}}Flux<Part>{{/reactive}}{{^reactive}}MultipartFile{{/reactive}}{{#isArray}}>{{/isArray}} {{paramName}}{{/isFile}}{{/isFormParam}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-cloud/pom.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-cloud/pom.mustache
index 1636e5918366f68daa69b5786ebce1a65f1cf2a1..f9228dd345e2e83fe1f95f11aaa872a86f50a606 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-cloud/pom.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-cloud/pom.mustache
@@ -9,7 +9,10 @@
         <java.version>{{#java8}}1.8{{/java8}}{{^java8}}1.7{{/java8}}</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <swagger-core-version>1.5.18</swagger-core-version>
+        <swagger-core-version>{{#oas3}}2.1.11{{/oas3}}{{^oas3}}1.6.3{{/oas3}}</swagger-core-version>
+        {{#useSpringfox}}
+        <springfox.version>2.9.2</springfox.version>
+        {{/useSpringfox}}
     </properties>
 {{#parentOverridden}}
     <parent>
@@ -22,7 +25,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.5.5</version>
+        <version>2.6.2</version>
     </parent>
 {{/parentOverridden}}
     <build>
@@ -35,7 +38,7 @@
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-starter-parent</artifactId>
-                <version>2020.0.4</version>
+                <version>2021.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
@@ -44,27 +47,37 @@
 
 {{/parentOverridden}}
     <dependencies>
+        {{#useSpringfox}}
+        <!--SpringFox dependencies -->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>${springfox.version}</version>
+        </dependency>
+        {{/useSpringfox}}
+        {{^useSpringfox}}
         {{#oas3}}
         <dependency>
             <groupId>io.swagger.core.v3</groupId>
             <artifactId>swagger-annotations</artifactId>
-            <version>2.1.2</version>
+            <version>${swagger-core-version}</version>
         </dependency>
         {{/oas3}}
         {{^oas3}}
         <dependency>
             <groupId>io.swagger</groupId>
             <artifactId>swagger-annotations</artifactId>
-{{^parentOverridden}}
             <version>${swagger-core-version}</version>
-{{/parentOverridden}}
         </dependency>
         {{/oas3}}
+        {{/useSpringfox}}
         <!-- @Nullable annotation -->
         <dependency>
             <groupId>com.google.code.findbugs</groupId>
             <artifactId>jsr305</artifactId>
+            {{^parentOverridden}}
             <version>3.0.2</version>
+            {{/parentOverridden}}
         </dependency>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
@@ -73,7 +86,9 @@
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-oauth2</artifactId>
+            {{^parentOverridden}}
             <version>2.2.5.RELEASE</version>
+            {{/parentOverridden}}
         </dependency>
         {{#withXml}}
         <!-- XML processing: Jackson -->
@@ -107,40 +122,31 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            {{^parentOverridden}}
-            <version>0.2.1</version>
-            {{/parentOverridden}}
+        {{^parentOverridden}}
+            <version>0.2.2</version>
+        {{/parentOverridden}}
         </dependency>
         {{/openApiNullable}}
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-{{#hateoas}}
-        <!-- Spring HATEOAS -->
+        {{#hateoas}}
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-hateoas</artifactId>
         </dependency>
-{{/hateoas}}
-{{#useBeanValidation}}
-        <dependency>
-            <groupId>org.hibernate.validator</groupId>
-            <artifactId>hibernate-validator</artifactId>
-        {{^parentOverridden}}
-            <version>6.0.16.Final</version>
-        {{/parentOverridden}}
-        </dependency>
-{{/useBeanValidation}}
+        {{/hateoas}}
+        {{#useBeanValidation}}
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>3.0.0</version>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
+        {{/useBeanValidation}}
         <dependency>
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-commons</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-mvc/pom.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-mvc/pom.mustache
index 9230b32c9d32d8404f120723af7cb15313cd21a7..f0f17f6b2088fd2fa44674784ef971bac26e9450 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-mvc/pom.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-mvc/pom.mustache
@@ -187,14 +187,14 @@
         <dependency>
             <groupId>io.swagger.core.v3</groupId>
             <artifactId>swagger-annotations</artifactId>
-            <version>2.1.2</version>
+            <version>${swagger-core-version}</version>
         </dependency>
         {{/oas3}}
         {{^oas3}}
         <dependency>
             <groupId>io.swagger</groupId>
             <artifactId>swagger-annotations</artifactId>
-            <version>1.5.14</version>
+          <version>${swagger-core-version}</version>
         </dependency>
         {{/oas3}}
         <!-- @Nullable annotation -->
@@ -289,12 +289,12 @@
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
         <jakarta-annotation-version>1.3.5</jakarta-annotation-version>
-    	<jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
+    	  <jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
         <jetty-version>9.2.15.v20160210</jetty-version>
         <slf4j-version>1.7.21</slf4j-version>
         <junit-version>4.13.1</junit-version>
         <servlet-api-version>4.0.4</servlet-api-version>
-        <springfox-version>2.8.0</springfox-version>
+        <springfox-version>2.9.2</springfox-version>
         <jackson-version>2.9.9</jackson-version>
         <jackson-threetenbp-version>2.8.4</jackson-threetenbp-version>
 {{#useBeanValidation}}
@@ -305,5 +305,6 @@
         <jackson-databind-nullable-version>0.2.2</jackson-databind-nullable-version>
         {{/openApiNullable}}
         <jackson-databind-version>2.9.8</jackson-databind-version>
+        <swagger-core-version>{{#oas3}}2.1.11{{/oas3}}{{^oas3}}1.6.3{{/oas3}}</swagger-core-version>
     </properties>
 </project>
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/paramDoc.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/paramDoc.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..7f3eb71e0b01365f5a30ef87406a7fc36cef868e
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/paramDoc.mustache
@@ -0,0 +1 @@
+{{#oas3}}@Parameter(name = "{{{baseName}}}", description = "{{{description}}}"{{#required}}, required = true{{/required}}, schema = @Schema(description = ""{{#allowableValues}}, {{> allowableValues }}{{/allowableValues}}{{^isContainer}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}{{/isContainer}})){{/oas3}}{{^oas3}}@ApiParam(value = "{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}, {{> allowableValues }}{{/allowableValues}}{{^isContainer}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}{{/isContainer}}){{/oas3}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/pathParams.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/pathParams.mustache
index cf75bb92edec5dc851b85d57688f20fe46939ca3..16888518c1b98196732d52d35afa4e8bd3bcec39 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/pathParams.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/pathParams.mustache
@@ -1 +1 @@
-{{#isPathParam}}{{#useBeanValidation}}{{>beanValidationPathParams}}{{/useBeanValidation}}{{#oas3}}@Parameter(name = "{{baseName}}", description ={{/oas3}}{{^oas3}}@ApiParam(value ={{/oas3}} "{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}, allowableValues = "{{#enumVars}}{{#lambdaRemoveDoubleQuote}}{{{value}}}{{/lambdaRemoveDoubleQuote}}{{^-last}}, {{/-last}}{{#-last}}{{/-last}}{{/enumVars}}"{{/allowableValues}}{{^isContainer}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}{{/isContainer}}) @PathVariable("{{baseName}}") {{>optionalDataType}} {{paramName}}{{/isPathParam}}
+{{#isPathParam}}{{#useBeanValidation}}{{>beanValidationPathParams}}{{/useBeanValidation}}{{>paramDoc}} @PathVariable("{{baseName}}"){{>dateTimeParam}} {{>optionalDataType}} {{paramName}}{{/isPathParam}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/queryParams.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/queryParams.mustache
index 557b3ca837a89949624281d49a6b1098f56fc960..2e8911d8f5310ef5221548c23dcac7ea9ab2b390 100644
--- a/modules/openapi-generator/src/main/resources/JavaSpring/queryParams.mustache
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/queryParams.mustache
@@ -1 +1 @@
-{{#isQueryParam}}{{#useBeanValidation}}{{>beanValidationQueryParams}}{{/useBeanValidation}}{{#oas3}}@Parameter(name = "{{{baseName}}}", description = {{/oas3}}{{^oas3}}@ApiParam(value = {{/oas3}}"{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}, {{#oas3}}schema = @Schema({{/oas3}}allowableValues = "{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{#-last}}{{/-last}}{{/values}}"{{#oas3}}){{/oas3}}{{/allowableValues}}{{^isContainer}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}{{/isContainer}}){{#useBeanValidation}} @Valid{{/useBeanValidation}}{{^isModel}} @RequestParam(value = {{#isMap}}""{{/isMap}}{{^isMap}}"{{baseName}}"{{/isMap}}{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}{{^isContainer}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}{{/isContainer}}){{/isModel}}{{#isDate}} @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE){{/isDate}}{{#isDateTime}} @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME){{/isDateTime}} {{>optionalDataType}} {{paramName}}{{/isQueryParam}}
\ No newline at end of file
+{{#isQueryParam}}{{#useBeanValidation}}{{>beanValidationQueryParams}}{{/useBeanValidation}}{{>paramDoc}}{{#useBeanValidation}} @Valid{{/useBeanValidation}}{{^isModel}} @RequestParam(value = {{#isMap}}""{{/isMap}}{{^isMap}}"{{baseName}}"{{/isMap}}{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}{{^isContainer}}{{#defaultValue}}, defaultValue = "{{{.}}}"{{/defaultValue}}{{/isContainer}}){{/isModel}}{{>dateTimeParam}} {{>optionalDataType}} {{paramName}}{{/isQueryParam}}
\ No newline at end of file
diff --git a/modules/openapi-generator/src/test/resources/3_0/spring/date-time-parameter-types-for-testing.yml b/modules/openapi-generator/src/test/resources/3_0/spring/date-time-parameter-types-for-testing.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f32cd91426667bd7330be6a3f2551325e0919ad7
--- /dev/null
+++ b/modules/openapi-generator/src/test/resources/3_0/spring/date-time-parameter-types-for-testing.yml
@@ -0,0 +1,70 @@
+openapi: 3.0.3
+info:
+  title: Api Documentation
+  description: 'Demo Spring Mvc @DateTimeFormat across the different openapi parameter types'
+  version: '1.0'
+paths:
+  /thingy/{date}:
+    post:
+      description: 'update with form data'
+      operationId: updatePetWithForm
+      parameters:
+        - name: date
+          in: path
+          description: 'A date path parameter'
+          required: true
+          schema:
+            type: string
+            format: date
+            example: '2021-01-01'
+      responses:
+        '405':
+          description: Invalid input
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              type: object
+              properties:
+                visitDate:
+                  description: Updated last vist timestamp
+                  type: string
+                  format: date-time
+    get:
+      operationId: get
+      parameters:
+        - name: date
+          in: path
+          description: 'A date path parameter'
+          required: true
+          schema:
+            type: string
+            format: date
+            example: '2021-01-01'
+        - name: dateTime
+          description: 'A date-time query parameter'
+          in: query
+          required: true
+          schema:
+            type: string
+            format: date-time
+            example: '1996-12-19T16:39:57-08:00'
+        - name: X-Order-Date
+          in: header
+          description: 'A date header parameter'
+          required: true
+          schema:
+            type: string
+            format: date
+            example: '2021-01-01'
+        - name: loginDate
+          in: cookie
+          description: 'A date cookie parameter'
+          required: false
+          schema:
+            type: string
+            format: date
+            example: '2021-01-01'
+      responses:
+        '200':
+          description: OK
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index c77ae7240b4829995d727279f2f5790632fc4f90..81e5c5c2b2a7e734935c5bf59e50d50980df2e1c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,6 +3,7 @@
         <groupId>org.sonatype.oss</groupId>
         <artifactId>oss-parent</artifactId>
         <version>5</version>
+        <relativePath/><!-- lookup parent from repository -->
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.openapitools</groupId>
@@ -1208,15 +1209,21 @@
                 <module>samples/server/petstore/jaxrs-resteasy/joda</module>
                 <module>samples/server/petstore/jaxrs-resteasy/default-value</module>
                 <!--<module>samples/server/petstore/kotlin-server/ktor</module>-->
-                <!-- move to other CI as the following fails often in CircleCI
-                <module>samples/server/petstore/spring-mvc</module>
-                <module>samples/server/petstore/spring-mvc-j8-async</module>
-                <module>samples/server/petstore/spring-mvc-j8-localdatetime</module>-->
                 <module>samples/client/petstore/spring-cloud</module>
+                <module>samples/openapi3/client/petstore/spring-cloud</module>
+                <module>samples/client/petstore/spring-cloud-date-time</module>
+                <module>samples/openapi3/client/petstore/spring-cloud-date-time</module>
                 <module>samples/server/petstore/springboot</module>
+                <module>samples/openapi3/server/petstore/springboot</module>
                 <module>samples/server/petstore/springboot-beanvalidation</module>
                 <module>samples/server/petstore/springboot-useoptional</module>
+                <module>samples/openapi3/server/petstore/springboot-useoptional</module>
                 <module>samples/server/petstore/springboot-reactive</module>
+                <module>samples/openapi3/server/petstore/springboot-reactive</module>
+                <module>samples/server/petstore/springboot-implicitHeaders</module>
+                <module>samples/openapi3/server/petstore/springboot-implicitHeaders</module>
+                <module>samples/server/petstore/springboot-delegate</module>
+                <module>samples/openapi3/server/petstore/springboot-delegate</module>
                 <module>samples/server/petstore/jaxrs-cxf</module>
                 <module>samples/server/petstore/jaxrs-cxf-annotated-base-path</module>
                 <module>samples/server/petstore/jaxrs-cxf-cdi</module>
@@ -1230,6 +1237,37 @@
                 <module>samples/server/petstore/scala-finch</module>
             </modules>
         </profile>
+        <profile>
+            <id>samples.circleci.spring</id>
+            <activation>
+                <property>
+                    <name>env</name>
+                    <value>samples.circleci.spring</value>
+                </property>
+            </activation>
+            <modules>
+                <module>samples/server/petstore/spring-mvc</module>
+                <module>samples/server/petstore/spring-mvc-default-value</module>
+                <module>samples/server/petstore/spring-mvc-j8-async</module>
+                <module>samples/server/petstore/spring-mvc-j8-localdatetime</module>
+                <!-- servers -->
+                <module>samples/client/petstore/spring-cloud</module>
+                <module>samples/openapi3/client/petstore/spring-cloud</module>
+                <module>samples/client/petstore/spring-cloud-date-time</module>
+                <module>samples/openapi3/client/petstore/spring-cloud-date-time</module>
+                <module>samples/server/petstore/springboot</module>
+                <module>samples/openapi3/server/petstore/springboot</module>
+                <module>samples/server/petstore/springboot-beanvalidation</module>
+                <module>samples/server/petstore/springboot-useoptional</module>
+                <module>samples/openapi3/server/petstore/springboot-useoptional</module>
+                <module>samples/server/petstore/springboot-reactive</module>
+                <module>samples/openapi3/server/petstore/springboot-reactive</module>
+                <module>samples/server/petstore/springboot-implicitHeaders</module>
+                <module>samples/openapi3/server/petstore/springboot-implicitHeaders</module>
+                <module>samples/server/petstore/springboot-delegate</module>
+                <module>samples/openapi3/server/petstore/springboot-delegate</module>
+            </modules>
+        </profile>
         <!-- node 3 tests in CircleCI -->
         <profile>
             <id>samples.circleci.node3</id>
diff --git a/samples/client/others/csharp-netcore-complex-files/.openapi-generator/VERSION b/samples/client/others/csharp-netcore-complex-files/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/others/csharp-netcore-complex-files/.openapi-generator/VERSION
+++ b/samples/client/others/csharp-netcore-complex-files/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/others/java/okhttp-gson-streaming/.openapi-generator/VERSION b/samples/client/others/java/okhttp-gson-streaming/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/others/java/okhttp-gson-streaming/.openapi-generator/VERSION
+++ b/samples/client/others/java/okhttp-gson-streaming/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/R/.openapi-generator/VERSION b/samples/client/petstore/R/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/R/.openapi-generator/VERSION
+++ b/samples/client/petstore/R/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/apex/.openapi-generator/VERSION b/samples/client/petstore/apex/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/apex/.openapi-generator/VERSION
+++ b/samples/client/petstore/apex/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/bash/.openapi-generator/VERSION b/samples/client/petstore/bash/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/bash/.openapi-generator/VERSION
+++ b/samples/client/petstore/bash/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/c/.openapi-generator/VERSION b/samples/client/petstore/c/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/c/.openapi-generator/VERSION
+++ b/samples/client/petstore/c/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/cpp-qt/.openapi-generator/VERSION b/samples/client/petstore/cpp-qt/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/cpp-qt/.openapi-generator/VERSION
+++ b/samples/client/petstore/cpp-qt/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/cpp-restsdk/client/.openapi-generator/VERSION b/samples/client/petstore/cpp-restsdk/client/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/cpp-restsdk/client/.openapi-generator/VERSION
+++ b/samples/client/petstore/cpp-restsdk/client/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/cpp-restsdk/client/ApiClient.cpp b/samples/client/petstore/cpp-restsdk/client/ApiClient.cpp
index 885c229bfe76ec4bfabbc79fa904cbd1fc75db47..b5c500a0fa14eb2f054c3564b9ab27230d4d5123 100644
--- a/samples/client/petstore/cpp-restsdk/client/ApiClient.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/ApiClient.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/ApiClient.h b/samples/client/petstore/cpp-restsdk/client/ApiClient.h
index c2db5dc08c49f62eabcd29ee766c7f3f7abf8bae..7a13f219f4eb26723db94d8480436cc2c33b19db 100644
--- a/samples/client/petstore/cpp-restsdk/client/ApiClient.h
+++ b/samples/client/petstore/cpp-restsdk/client/ApiClient.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp b/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp
index bd0cb8c0e9e2151c2dd46da2f7fde7b5f469bd3e..67e66b708cdfdb4c54db92cc918fffc186676c5c 100644
--- a/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h b/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h
index d65ddb6b2ff9b43356dd310bccb390b5238d71f9..046dfd9ea533a3f0d8d4efd900adf463363e976d 100644
--- a/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h
+++ b/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/ApiException.cpp b/samples/client/petstore/cpp-restsdk/client/ApiException.cpp
index 928bf8e0413bc1dc71b6610b007820d875b969ad..8f981150270afb80407daf76661bf8b441c5d73e 100644
--- a/samples/client/petstore/cpp-restsdk/client/ApiException.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/ApiException.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/ApiException.h b/samples/client/petstore/cpp-restsdk/client/ApiException.h
index bced883bee7db244e6b040ae1fd69585f93e1ec9..5d1d82b9a8ed1e19fb075eab87b74de5b57051a5 100644
--- a/samples/client/petstore/cpp-restsdk/client/ApiException.h
+++ b/samples/client/petstore/cpp-restsdk/client/ApiException.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/HttpContent.cpp b/samples/client/petstore/cpp-restsdk/client/HttpContent.cpp
index eac0d66ff3ae28f1787733502dfccf26ea9a0e56..be68ba1c7fadf93eb810629475614de36a7976ac 100644
--- a/samples/client/petstore/cpp-restsdk/client/HttpContent.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/HttpContent.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/HttpContent.h b/samples/client/petstore/cpp-restsdk/client/HttpContent.h
index bfa0d19bbf185ef3e72e2416e120496b2c663c5f..d8bd333dad15e342ae621f09982a4b2c1427bd7a 100644
--- a/samples/client/petstore/cpp-restsdk/client/HttpContent.h
+++ b/samples/client/petstore/cpp-restsdk/client/HttpContent.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/IHttpBody.h b/samples/client/petstore/cpp-restsdk/client/IHttpBody.h
index a5adf55cf84dd66db54445be59a9084a2db3b845..7661536b930bf173ed7c4ce7c0e9bbc30a6f42ea 100644
--- a/samples/client/petstore/cpp-restsdk/client/IHttpBody.h
+++ b/samples/client/petstore/cpp-restsdk/client/IHttpBody.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/JsonBody.cpp b/samples/client/petstore/cpp-restsdk/client/JsonBody.cpp
index b47bc2c5bd72c171ba557e8a8eb9f21f518ad19a..85dbe17686e7c81a977a8679647ddfde9f02776e 100644
--- a/samples/client/petstore/cpp-restsdk/client/JsonBody.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/JsonBody.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/JsonBody.h b/samples/client/petstore/cpp-restsdk/client/JsonBody.h
index c50267c56ecd191e7718f8603eb47edc3834ac13..99344661cb8ccf2e8498ef3a78f9fbe20a3d95e2 100644
--- a/samples/client/petstore/cpp-restsdk/client/JsonBody.h
+++ b/samples/client/petstore/cpp-restsdk/client/JsonBody.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp b/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp
index 75d1bb01cfb230dad24041925c871f91beae4ae2..752b93f705967d5b3d06c159fc8583fe0ef3f624 100644
--- a/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/ModelBase.h b/samples/client/petstore/cpp-restsdk/client/ModelBase.h
index 831ffa9f4e8d003eac95669bfae716b002ec1584..c300ecb5af7960934f9370f8485ef4e85b7a80ea 100644
--- a/samples/client/petstore/cpp-restsdk/client/ModelBase.h
+++ b/samples/client/petstore/cpp-restsdk/client/ModelBase.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/MultipartFormData.cpp b/samples/client/petstore/cpp-restsdk/client/MultipartFormData.cpp
index d8f3ee4340f52406f2356022f4be1aac1e286097..075f7867be7ba041d5965be4dfe8ed99001290d4 100644
--- a/samples/client/petstore/cpp-restsdk/client/MultipartFormData.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/MultipartFormData.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/MultipartFormData.h b/samples/client/petstore/cpp-restsdk/client/MultipartFormData.h
index d260399229add752eb623b6db99b0e82ae5afdf9..a7e8a87f5ad5d8580ef384e10c80a76ec78c05bc 100644
--- a/samples/client/petstore/cpp-restsdk/client/MultipartFormData.h
+++ b/samples/client/petstore/cpp-restsdk/client/MultipartFormData.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/Object.cpp b/samples/client/petstore/cpp-restsdk/client/Object.cpp
index 968df9a4877f432f50b962c396ab28d19e133e52..2c2f65d4ed85eb4b35b2722240b594084a73913e 100644
--- a/samples/client/petstore/cpp-restsdk/client/Object.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/Object.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/Object.h b/samples/client/petstore/cpp-restsdk/client/Object.h
index 6bcec36c0285853312b4ccb2406d0f296b5ba429..ba2a3bdb8c75ba935a3638e8a4b7f15d6137772b 100644
--- a/samples/client/petstore/cpp-restsdk/client/Object.h
+++ b/samples/client/petstore/cpp-restsdk/client/Object.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp b/samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp
index 2c2236f7d2730f595f8db31abf17480ad909b3e3..5bf94b7ce2577d194d3a04b6559d953e47756511 100644
--- a/samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/api/PetApi.h b/samples/client/petstore/cpp-restsdk/client/api/PetApi.h
index a6bf7fcbcc49e2618d8e952846e9d8555dd36de7..7881387800fe5d2f6d6271f8dcb4ca42de81d9cc 100644
--- a/samples/client/petstore/cpp-restsdk/client/api/PetApi.h
+++ b/samples/client/petstore/cpp-restsdk/client/api/PetApi.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp b/samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp
index 7171938cadfca74f4e827a409ce6a7c385e56e4f..e415ebeffc535f3ab370b6347423f7e7adc57cfb 100644
--- a/samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/api/StoreApi.h b/samples/client/petstore/cpp-restsdk/client/api/StoreApi.h
index 5d35de7fc3bfcfe877a19ada7f751cd104885281..10bf58494212d333bbdce42bad7463834e8bc42e 100644
--- a/samples/client/petstore/cpp-restsdk/client/api/StoreApi.h
+++ b/samples/client/petstore/cpp-restsdk/client/api/StoreApi.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp b/samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp
index bc13700dfd502450939a7359fbeeee9b2cae2a46..a291d4f0c4a2c517337acfaa7aaab12301aee3ef 100644
--- a/samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/api/UserApi.h b/samples/client/petstore/cpp-restsdk/client/api/UserApi.h
index 0b2a6144332e1e991e03e9330b8cb1bc4df6843c..942da254f2a40c1b70882a0de9b4f118ab78cb16 100644
--- a/samples/client/petstore/cpp-restsdk/client/api/UserApi.h
+++ b/samples/client/petstore/cpp-restsdk/client/api/UserApi.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.cpp b/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.cpp
index 214e69dcbeb30748e0a6cf9e4e3b9c92e3ee5c70..4157079156d68838bf3d83dc3413078a04343d88 100644
--- a/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h b/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h
index 86a703fae9c2dd30421b9ead58578c40a044d2b4..fcb15887683e686c5bac3aed67a53011aa160eb2 100644
--- a/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h
+++ b/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/model/Category.cpp b/samples/client/petstore/cpp-restsdk/client/model/Category.cpp
index 3250fef9ca9c962fd2d0e9fbd9ebb80614de9c80..2fcec2bcaab4d6f39819fa4273422994fa2b781e 100644
--- a/samples/client/petstore/cpp-restsdk/client/model/Category.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/model/Category.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/model/Category.h b/samples/client/petstore/cpp-restsdk/client/model/Category.h
index 7ecefb54929993e0cc672eeca3fc2b42119b4879..777e5baf3b6a8f9f75df9403423e0201b4d9d276 100644
--- a/samples/client/petstore/cpp-restsdk/client/model/Category.h
+++ b/samples/client/petstore/cpp-restsdk/client/model/Category.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/model/Order.cpp b/samples/client/petstore/cpp-restsdk/client/model/Order.cpp
index 4fc8ad8b5cf18a4e5b46decbde1c9fdc892c29f7..f8618ce035511352b6d9233e8f5ddd469f959df0 100644
--- a/samples/client/petstore/cpp-restsdk/client/model/Order.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/model/Order.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/model/Order.h b/samples/client/petstore/cpp-restsdk/client/model/Order.h
index a10e8c34f4dee07d01ceeb3ca3c4a50ce0be3df7..893c367dc6cf9510d2bb6f8ce9e4f4935c82de12 100644
--- a/samples/client/petstore/cpp-restsdk/client/model/Order.h
+++ b/samples/client/petstore/cpp-restsdk/client/model/Order.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/model/Pet.cpp b/samples/client/petstore/cpp-restsdk/client/model/Pet.cpp
index 76867745ecb2623516cf691cc2a9b380c69b1e63..12c9dfa8b8ffdeb16001741bc3c347f06dbe9f1e 100644
--- a/samples/client/petstore/cpp-restsdk/client/model/Pet.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/model/Pet.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/model/Pet.h b/samples/client/petstore/cpp-restsdk/client/model/Pet.h
index b5f8b346b3147f64ec6800e35db05184eab16557..e6ade678425879a0e7fdb11c8d091db75ab812a1 100644
--- a/samples/client/petstore/cpp-restsdk/client/model/Pet.h
+++ b/samples/client/petstore/cpp-restsdk/client/model/Pet.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/model/Tag.cpp b/samples/client/petstore/cpp-restsdk/client/model/Tag.cpp
index eafb5845d527594dd299b489cf37fb4f0a1ba3a9..14bce27318e42a766838d5048e20732654bc0abd 100644
--- a/samples/client/petstore/cpp-restsdk/client/model/Tag.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/model/Tag.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/model/Tag.h b/samples/client/petstore/cpp-restsdk/client/model/Tag.h
index a6f8d6932545984c8878b9c2f4e13ccacfa7b595..2a7a3d005cc82dd9df927019b21f1c57ddf6451b 100644
--- a/samples/client/petstore/cpp-restsdk/client/model/Tag.h
+++ b/samples/client/petstore/cpp-restsdk/client/model/Tag.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/model/User.cpp b/samples/client/petstore/cpp-restsdk/client/model/User.cpp
index 074b337eda840ec38b748936d88948d1c99fe1ad..38aebe66ad09f8237498f715151a68f77abfedb5 100644
--- a/samples/client/petstore/cpp-restsdk/client/model/User.cpp
+++ b/samples/client/petstore/cpp-restsdk/client/model/User.cpp
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-restsdk/client/model/User.h b/samples/client/petstore/cpp-restsdk/client/model/User.h
index 588445311bc8bed9610c2f1442e558e584791d36..3e44d4750ce569a5f0298ed6d0a7a72358d9cb6c 100644
--- a/samples/client/petstore/cpp-restsdk/client/model/User.h
+++ b/samples/client/petstore/cpp-restsdk/client/model/User.h
@@ -4,7 +4,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  *
- * NOTE: This class is auto generated by OpenAPI-Generator 5.3.1.
+ * NOTE: This class is auto generated by OpenAPI-Generator 5.4.0-SNAPSHOT.
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
diff --git a/samples/client/petstore/cpp-tiny/.openapi-generator/VERSION b/samples/client/petstore/cpp-tiny/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/cpp-tiny/.openapi-generator/VERSION
+++ b/samples/client/petstore/cpp-tiny/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/cpp-ue4/.openapi-generator/VERSION b/samples/client/petstore/cpp-ue4/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/cpp-ue4/.openapi-generator/VERSION
+++ b/samples/client/petstore/cpp-ue4/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/crystal/.openapi-generator/VERSION b/samples/client/petstore/crystal/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/crystal/.openapi-generator/VERSION
+++ b/samples/client/petstore/crystal/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/crystal/.travis.yml b/samples/client/petstore/crystal/.travis.yml
index 6bc76c06134e679a625979a920cef6577da43bf6..59de24cd459bfa7899d84e508710fb2aef6cc04b 100644
--- a/samples/client/petstore/crystal/.travis.yml
+++ b/samples/client/petstore/crystal/.travis.yml
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 language: crystal
diff --git a/samples/client/petstore/crystal/spec/spec_helper.cr b/samples/client/petstore/crystal/spec/spec_helper.cr
index 901c229549216f6bfd8cbaa4424325dfb1938b16..c6eb4e7a6030ca29631276026cfa4c550243ca4a 100644
--- a/samples/client/petstore/crystal/spec/spec_helper.cr
+++ b/samples/client/petstore/crystal/spec/spec_helper.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 # load modules
diff --git a/samples/client/petstore/crystal/src/petstore.cr b/samples/client/petstore/crystal/src/petstore.cr
index 95c15e09964805d7d6d644d299ab6b3007cbbc89..bfa9806eea98aaa68ce53c7986fd91c4eee4b64c 100644
--- a/samples/client/petstore/crystal/src/petstore.cr
+++ b/samples/client/petstore/crystal/src/petstore.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 # Dependencies
diff --git a/samples/client/petstore/crystal/src/petstore/api/pet_api.cr b/samples/client/petstore/crystal/src/petstore/api/pet_api.cr
index e2c81b3a3bb3608eae5421d2ae30f886f81d76db..a808853db0c5c703dd19d308c03eef4f897d5876 100644
--- a/samples/client/petstore/crystal/src/petstore/api/pet_api.cr
+++ b/samples/client/petstore/crystal/src/petstore/api/pet_api.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 require "uri"
diff --git a/samples/client/petstore/crystal/src/petstore/api/store_api.cr b/samples/client/petstore/crystal/src/petstore/api/store_api.cr
index f080f1a29a9a31b1c8f94bd9e0f067efd27817da..633b3ca71fd07b37e02d3a934bf20ef5f524a974 100644
--- a/samples/client/petstore/crystal/src/petstore/api/store_api.cr
+++ b/samples/client/petstore/crystal/src/petstore/api/store_api.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 require "uri"
diff --git a/samples/client/petstore/crystal/src/petstore/api/user_api.cr b/samples/client/petstore/crystal/src/petstore/api/user_api.cr
index f936051d44d6acfb6a6e9bdebcb76edcf21e10f6..9809fc615e87581cd68ba9ef5754a9c80d23a5c7 100644
--- a/samples/client/petstore/crystal/src/petstore/api/user_api.cr
+++ b/samples/client/petstore/crystal/src/petstore/api/user_api.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 require "uri"
diff --git a/samples/client/petstore/crystal/src/petstore/api_client.cr b/samples/client/petstore/crystal/src/petstore/api_client.cr
index e8377faa33b5493cf9f059dc1075702c53f15b98..5a15ff6f6f3bc92da81631c3684ab287a158eba3 100644
--- a/samples/client/petstore/crystal/src/petstore/api_client.cr
+++ b/samples/client/petstore/crystal/src/petstore/api_client.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 require "json"
diff --git a/samples/client/petstore/crystal/src/petstore/api_error.cr b/samples/client/petstore/crystal/src/petstore/api_error.cr
index 482fcb96160c08a2c5357aeafcd61b3a44c5b6ea..c99be8e41f81fab06389da4565b829991f46b04b 100644
--- a/samples/client/petstore/crystal/src/petstore/api_error.cr
+++ b/samples/client/petstore/crystal/src/petstore/api_error.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 module Petstore
diff --git a/samples/client/petstore/crystal/src/petstore/configuration.cr b/samples/client/petstore/crystal/src/petstore/configuration.cr
index d87702fb8a2ee4aa23a0f3a0d268b5dc4836690d..cc46c380f1fa5b7c424914b3137512375de6ac81 100644
--- a/samples/client/petstore/crystal/src/petstore/configuration.cr
+++ b/samples/client/petstore/crystal/src/petstore/configuration.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 require "log"
diff --git a/samples/client/petstore/crystal/src/petstore/models/api_response.cr b/samples/client/petstore/crystal/src/petstore/models/api_response.cr
index 0c0aa1fd1c2c3b5bbc9023df69a05663d2911d9a..be55113490700c15ea5cc0380993c216f2b7edff 100644
--- a/samples/client/petstore/crystal/src/petstore/models/api_response.cr
+++ b/samples/client/petstore/crystal/src/petstore/models/api_response.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 require "json"
diff --git a/samples/client/petstore/crystal/src/petstore/models/category.cr b/samples/client/petstore/crystal/src/petstore/models/category.cr
index 11dcb87bad73992970eaf8ec9d67ab29ff15e133..55c64154d97ccbb21dae0fed115538f2f2aafd50 100644
--- a/samples/client/petstore/crystal/src/petstore/models/category.cr
+++ b/samples/client/petstore/crystal/src/petstore/models/category.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 require "json"
diff --git a/samples/client/petstore/crystal/src/petstore/models/order.cr b/samples/client/petstore/crystal/src/petstore/models/order.cr
index 4d03556ff81937e9fda4e79dec89ffcfd6edccbf..5d00ea6688ff9962ec4d989bca276d3a4dd379b5 100644
--- a/samples/client/petstore/crystal/src/petstore/models/order.cr
+++ b/samples/client/petstore/crystal/src/petstore/models/order.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 require "json"
diff --git a/samples/client/petstore/crystal/src/petstore/models/pet.cr b/samples/client/petstore/crystal/src/petstore/models/pet.cr
index 7fb8cc4521fd86a2e170b36603d04b36dc512f91..cdac65776d761ffe4716ed9c7993664f7adedcfb 100644
--- a/samples/client/petstore/crystal/src/petstore/models/pet.cr
+++ b/samples/client/petstore/crystal/src/petstore/models/pet.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 require "json"
diff --git a/samples/client/petstore/crystal/src/petstore/models/tag.cr b/samples/client/petstore/crystal/src/petstore/models/tag.cr
index 9b95af047b12302315f5c5faed113ccfd65a1631..bd293329185388777ea31400552b64284e6d83fc 100644
--- a/samples/client/petstore/crystal/src/petstore/models/tag.cr
+++ b/samples/client/petstore/crystal/src/petstore/models/tag.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 require "json"
diff --git a/samples/client/petstore/crystal/src/petstore/models/user.cr b/samples/client/petstore/crystal/src/petstore/models/user.cr
index 7b647aaee1005c202adcb8f3a255195fe2f6b64d..47430b4452a9cc160a515528f0d95257c122746d 100644
--- a/samples/client/petstore/crystal/src/petstore/models/user.cr
+++ b/samples/client/petstore/crystal/src/petstore/models/user.cr
@@ -5,7 +5,7 @@
 #The version of the OpenAPI document: 1.0.0
 #
 #Generated by: https://openapi-generator.tech
-#OpenAPI Generator version: 5.3.1
+#OpenAPI Generator version: 5.4.0-SNAPSHOT
 #
 
 require "json"
diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-ConditionalSerialization/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient-ConditionalSerialization/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/csharp-netcore/OpenAPIClient-ConditionalSerialization/.openapi-generator/VERSION
+++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-ConditionalSerialization/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/VERSION
+++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-net47/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient-net47/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/csharp-netcore/OpenAPIClient-net47/.openapi-generator/VERSION
+++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-net47/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-net5.0/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient-net5.0/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/csharp-netcore/OpenAPIClient-net5.0/.openapi-generator/VERSION
+++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-net5.0/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/csharp-netcore/OpenAPIClient/.openapi-generator/VERSION
+++ b/samples/client/petstore/csharp-netcore/OpenAPIClient/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION
+++ b/samples/client/petstore/csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClientCoreAndNet47/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClientCoreAndNet47/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/csharp-netcore/OpenAPIClientCoreAndNet47/.openapi-generator/VERSION
+++ b/samples/client/petstore/csharp-netcore/OpenAPIClientCoreAndNet47/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/VERSION b/samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/VERSION
+++ b/samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/elixir/.openapi-generator/VERSION b/samples/client/petstore/elixir/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/elixir/.openapi-generator/VERSION
+++ b/samples/client/petstore/elixir/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/go/go-petstore/.openapi-generator/VERSION b/samples/client/petstore/go/go-petstore/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/go/go-petstore/.openapi-generator/VERSION
+++ b/samples/client/petstore/go/go-petstore/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/groovy/.openapi-generator/VERSION b/samples/client/petstore/groovy/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/groovy/.openapi-generator/VERSION
+++ b/samples/client/petstore/groovy/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/haskell-http-client/.openapi-generator/VERSION b/samples/client/petstore/haskell-http-client/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/haskell-http-client/.openapi-generator/VERSION
+++ b/samples/client/petstore/haskell-http-client/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java-micronaut-client/.openapi-generator/VERSION b/samples/client/petstore/java-micronaut-client/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java-micronaut-client/.openapi-generator/VERSION
+++ b/samples/client/petstore/java-micronaut-client/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/apache-httpclient/.openapi-generator/VERSION b/samples/client/petstore/java/apache-httpclient/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/apache-httpclient/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/apache-httpclient/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/feign-no-nullable/.openapi-generator/VERSION b/samples/client/petstore/java/feign-no-nullable/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/feign-no-nullable/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/feign-no-nullable/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/feign/.openapi-generator/VERSION b/samples/client/petstore/java/feign/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/feign/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/feign/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/google-api-client/.openapi-generator/VERSION b/samples/client/petstore/java/google-api-client/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/google-api-client/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/google-api-client/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/jersey1/.openapi-generator/VERSION b/samples/client/petstore/java/jersey1/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/jersey1/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/jersey1/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/jersey2-java8-localdatetime/.openapi-generator/VERSION b/samples/client/petstore/java/jersey2-java8-localdatetime/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/jersey2-java8-localdatetime/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/jersey2-java8-localdatetime/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/jersey2-java8/.openapi-generator/VERSION b/samples/client/petstore/java/jersey2-java8/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/jersey2-java8/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/jersey2-java8/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/microprofile-rest-client/.openapi-generator/VERSION b/samples/client/petstore/java/microprofile-rest-client/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/microprofile-rest-client/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/microprofile-rest-client/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/native-async/.openapi-generator/VERSION b/samples/client/petstore/java/native-async/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/native-async/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/native-async/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/native/.openapi-generator/VERSION b/samples/client/petstore/java/native/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/native/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/native/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/okhttp-gson-dynamicOperations/.openapi-generator/VERSION b/samples/client/petstore/java/okhttp-gson-dynamicOperations/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/okhttp-gson-dynamicOperations/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/okhttp-gson-dynamicOperations/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/okhttp-gson-nextgen/.openapi-generator/VERSION b/samples/client/petstore/java/okhttp-gson-nextgen/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/okhttp-gson-nextgen/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/okhttp-gson-nextgen/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/okhttp-gson-parcelableModel/.openapi-generator/VERSION b/samples/client/petstore/java/okhttp-gson-parcelableModel/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/okhttp-gson-parcelableModel/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/okhttp-gson-parcelableModel/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/okhttp-gson/.openapi-generator/VERSION b/samples/client/petstore/java/okhttp-gson/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/okhttp-gson/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/okhttp-gson/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/rest-assured-jackson/.openapi-generator/VERSION b/samples/client/petstore/java/rest-assured-jackson/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/rest-assured-jackson/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/rest-assured-jackson/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/rest-assured/.openapi-generator/VERSION b/samples/client/petstore/java/rest-assured/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/rest-assured/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/rest-assured/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/resteasy/.openapi-generator/VERSION b/samples/client/petstore/java/resteasy/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/resteasy/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/resteasy/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/resttemplate-withXml/.openapi-generator/VERSION b/samples/client/petstore/java/resttemplate-withXml/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/resttemplate-withXml/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/resttemplate-withXml/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/resttemplate/.openapi-generator/VERSION b/samples/client/petstore/java/resttemplate/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/resttemplate/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/resttemplate/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/retrofit2-play26/.openapi-generator/VERSION b/samples/client/petstore/java/retrofit2-play26/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/retrofit2-play26/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/retrofit2-play26/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/retrofit2/.openapi-generator/VERSION b/samples/client/petstore/java/retrofit2/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/retrofit2/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/retrofit2/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/retrofit2rx2/.openapi-generator/VERSION b/samples/client/petstore/java/retrofit2rx2/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/retrofit2rx2/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/retrofit2rx2/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/retrofit2rx3/.openapi-generator/VERSION b/samples/client/petstore/java/retrofit2rx3/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/retrofit2rx3/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/retrofit2rx3/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/vertx-no-nullable/.openapi-generator/VERSION b/samples/client/petstore/java/vertx-no-nullable/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/vertx-no-nullable/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/vertx-no-nullable/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/vertx/.openapi-generator/VERSION b/samples/client/petstore/java/vertx/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/vertx/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/vertx/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/webclient-nulable-arrays/.openapi-generator/VERSION b/samples/client/petstore/java/webclient-nulable-arrays/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/webclient-nulable-arrays/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/webclient-nulable-arrays/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/java/webclient/.openapi-generator/VERSION b/samples/client/petstore/java/webclient/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/java/webclient/.openapi-generator/VERSION
+++ b/samples/client/petstore/java/webclient/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/javascript-es6/.openapi-generator/VERSION b/samples/client/petstore/javascript-es6/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/javascript-es6/.openapi-generator/VERSION
+++ b/samples/client/petstore/javascript-es6/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/javascript-promise-es6/.openapi-generator/VERSION b/samples/client/petstore/javascript-promise-es6/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/javascript-promise-es6/.openapi-generator/VERSION
+++ b/samples/client/petstore/javascript-promise-es6/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/k6/.openapi-generator/VERSION b/samples/client/petstore/k6/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/k6/.openapi-generator/VERSION
+++ b/samples/client/petstore/k6/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/k6/script.js b/samples/client/petstore/k6/script.js
index da7d50e96536e0a2d37bee3fc25835d0a339c456..67f187fa9b1446df04e75d08eee23314ab20b246 100644
--- a/samples/client/petstore/k6/script.js
+++ b/samples/client/petstore/k6/script.js
@@ -7,7 +7,7 @@
  * NOTE: This class is auto generated by OpenAPI Generator.
  * https://github.com/OpenAPITools/openapi-generator
  *
- * OpenAPI generator version: 5.3.1
+ * OpenAPI generator version: 5.4.0-SNAPSHOT
  */
 
 
diff --git a/samples/client/petstore/kotlin-enum-default-value/.openapi-generator/VERSION b/samples/client/petstore/kotlin-enum-default-value/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-enum-default-value/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-enum-default-value/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-gson/.openapi-generator/VERSION b/samples/client/petstore/kotlin-gson/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-gson/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-gson/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-jackson/.openapi-generator/VERSION b/samples/client/petstore/kotlin-jackson/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-jackson/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-jackson/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-json-request-string/.openapi-generator/VERSION b/samples/client/petstore/kotlin-json-request-string/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-json-request-string/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-json-request-string/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-jvm-volley/.openapi-generator/VERSION b/samples/client/petstore/kotlin-jvm-volley/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-jvm-volley/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-jvm-volley/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/VERSION b/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-multiplatform/.openapi-generator/VERSION b/samples/client/petstore/kotlin-multiplatform/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-multiplatform/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-multiplatform/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-nonpublic/.openapi-generator/VERSION b/samples/client/petstore/kotlin-nonpublic/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-nonpublic/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-nonpublic/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-nullable/.openapi-generator/VERSION b/samples/client/petstore/kotlin-nullable/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-nullable/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-nullable/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-okhttp3/.openapi-generator/VERSION b/samples/client/petstore/kotlin-okhttp3/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-okhttp3/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-okhttp3/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/.openapi-generator/VERSION b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION b/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-retrofit2/.openapi-generator/VERSION b/samples/client/petstore/kotlin-retrofit2/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-retrofit2/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-retrofit2/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-string/.openapi-generator/VERSION b/samples/client/petstore/kotlin-string/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-string/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-string/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-threetenbp/.openapi-generator/VERSION b/samples/client/petstore/kotlin-threetenbp/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-threetenbp/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-threetenbp/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/VERSION b/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/kotlin/.openapi-generator/VERSION b/samples/client/petstore/kotlin/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/kotlin/.openapi-generator/VERSION
+++ b/samples/client/petstore/kotlin/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/lua/.openapi-generator/VERSION b/samples/client/petstore/lua/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/lua/.openapi-generator/VERSION
+++ b/samples/client/petstore/lua/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/nim/.openapi-generator/VERSION b/samples/client/petstore/nim/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/nim/.openapi-generator/VERSION
+++ b/samples/client/petstore/nim/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/objc/core-data/.openapi-generator/VERSION b/samples/client/petstore/objc/core-data/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/objc/core-data/.openapi-generator/VERSION
+++ b/samples/client/petstore/objc/core-data/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/objc/default/.openapi-generator/VERSION b/samples/client/petstore/objc/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/objc/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/objc/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/perl/.openapi-generator/VERSION b/samples/client/petstore/perl/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/perl/.openapi-generator/VERSION
+++ b/samples/client/petstore/perl/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/php-dt-modern/.openapi-generator/VERSION b/samples/client/petstore/php-dt-modern/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/php-dt-modern/.openapi-generator/VERSION
+++ b/samples/client/petstore/php-dt-modern/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/php-dt/.openapi-generator/VERSION b/samples/client/petstore/php-dt/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/php-dt/.openapi-generator/VERSION
+++ b/samples/client/petstore/php-dt/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/VERSION b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/VERSION
+++ b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php
index ef0239cf3c6f1032b198105b1fd561c94aa2aef2..b069070fd138cf309a4ad4615ad3bc76b393f36a 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php
@@ -16,7 +16,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php
index c46d14ceacba557478e3fe5f1c8db0393a442ff3..def9fc15800587ab18166dfee081c8bdf25245f6 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php
@@ -16,7 +16,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php
index 18321834a0c7acb788bf8c47210ebe5bb22b32bb..6feaff88334241f399fd16eef0fb1fddf5b478f5 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php
@@ -16,7 +16,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php
index 2de6960003e15f04e525c656150dc5d2abc567dd..cf271105c8bb1de427b9dc3c7ccf8a02cf29d52e 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php
@@ -16,7 +16,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php
index affa3d61c5e2f446d77107efcd1cad3d6d26bd72..399cec4b7744f8cd28e3a2524f42b73101ae9847 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php
@@ -16,7 +16,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php
index 8af7471eba2425492a364fb4f1c4790a7dc29018..7fb733e79536341eba61cf11a4513fbd40e7d8a3 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php
@@ -16,7 +16,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php
index 941de5bc558414e6a1cd1ab93a95a2846deb61da..d54e6cfaef49d8e1808ecdd92bf3a820ef4b3a54 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php
@@ -16,7 +16,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/ApiException.php b/samples/client/petstore/php/OpenAPIClient-php/lib/ApiException.php
index 2011d70101b74ca2eec7ff2ab462ca1cd141d978..01f8b03d59a85c7c108031b7c5d96c3d65bc3b4a 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/ApiException.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/ApiException.php
@@ -16,7 +16,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Configuration.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Configuration.php
index 8bd9fbe0f27756c2f6a9c08d9450c13c82bd4518..cd182e99fcb10cf79d2cb7e68baa02d7b027e740 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Configuration.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Configuration.php
@@ -16,7 +16,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/HeaderSelector.php b/samples/client/petstore/php/OpenAPIClient-php/lib/HeaderSelector.php
index 08598d5d89d3a138898bd839a8a832af26eab3bc..c44fe4784d23acf8a0885e7467541a542243807f 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/HeaderSelector.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/HeaderSelector.php
@@ -16,7 +16,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php
index 34faf425f954fffdbf9e6e1471e36de0c7c5eb94..813a7583db51c122dfc479528872dd9e57bd8ccd 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php
index 281c00ce1deffc6d2c5faa16c94ed730af89051a..3f8820c97896301415b6007431a2bd969da491a7 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php
index 0e98f27fd82ab7f153b6647f70da9c8edd347aa1..b64c2a8772a6d79e8200c2850b5cee8b491eccb7 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php
index 1699097ee9410be8e4d68f2ddda955af35a78fa7..af16be5b4a09a6ea8eba45e68788a0ed5e902deb 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php
index 484d6d85db9723b13b55a57263229dd0dca95922..c932439bb4002c43a5f4cbeddeaf578c5fa41ec6 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php
index b273d72aadf416b0ef4b469fbad452ff5c02ce58..341366e541c0fdc57e096f104249e2c4f614eef2 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php
index b27ff3277a2d337094c7f46446098ae18da26c87..b1a0bd652c69d671a297d140bdb6135c1bab46e9 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php
index 7ec56fb28fc4efd0a00e631a004b935b865f9f45..75bc5fe9da99b2d933f17912b4f110a48089d319 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php
index 86c145ba23e227f9bed68bc587111301a630311d..ef088f7fd99b7b37eeeeeb5b983c0bb8c67b9b35 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Category.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Category.php
index 77cf9d7491b3eea2ca9f1939096085fc2d9d8f93..f61f944a48d1b5b3cd4bf6a6969250255b00b467 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Category.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Category.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php
index a10395aeb5afc58670a951853fb93d8ed19e0b3e..26293327c28ce4fea3b1547a917a954f2b945938 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Client.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Client.php
index 9003d71c55d22a4fb2f3c249acd679ec49101f59..fabf7edb56ccfe8c17bdcff2cfab9c41762e3ad7 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Client.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Client.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DeprecatedObject.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DeprecatedObject.php
index 709840cf55acf74face8c0e8681b686d5b3ec04f..3d2727154a259afa35eb94ba518fd55a2a86310b 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DeprecatedObject.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DeprecatedObject.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php
index 7019bc247b9b603c01f0b14674ee54d11ba93440..9f2f6b76f1019d79c49caeffb95d71de72df1223 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php
index 340c9b62d46a69bab341907fb91d9291e0d5f782..8dc34950ced97c4e8beb0b9c60331a5ab229eb08 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php
index 7087c06f4b9d6d3dec9b773598c074f9a5477a0e..20bdbe900e06141074b8fcb4c2db8463d3349894 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php
index 95e659d81c771cf399d28f7142462f335bf5e672..61c123dfe406c72156037e3c9efb5486454d57c2 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php
index a9b77449fb42536ff49c16587d4567e5761f45a9..61663693efa358291b3a74788877d74ef4504ec0 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/File.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/File.php
index dab541a365c11a766abcd6b08b11acde951138f4..2fbc4e79331b0a75824a60d3033c93f3e2cbf93f 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/File.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/File.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php
index 182bba9d0f4be5c8f18f841745b130c55fa3172a..7f6d4895ae5f5600cb0fa400e9ce6c67ad22a456 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php
index 0350c9b702c057c180c64b33a6b7e357042e16a2..5f3dd7183232e7b55117138098bd6676d1187c4b 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php
index ad12cf397cb5ff380cebe725d0d69cf820b9d4dd..65a211e15813047135507f9cdf8869ffea76a539 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php
index 63d53152ed29fa0e8c21589c865f02495356bc92..3aaae75260f3a97829333e86b20d5acf17b63972 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HealthCheckResult.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HealthCheckResult.php
index 1584ce6e4c9faba170ed3073b556c4116cc6f17d..71f11616f9eca39433b962e23272736d62582215 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HealthCheckResult.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HealthCheckResult.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php
index 6c2cddeab1371cffc0cfc008b20a4c668009cb0f..1b70b356259c260ca8238c2e265d45964d4859ed 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php
index aab4ab77d620d2e931d9baff2174b53f357e3874..7359bf0da86c17b8cdcd9ad5eb495c1c3fdf5761 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php
index 12d73135f2e3b3f49fe56bd0a38f84ad193de7fb..546996e9c752a58f451d688163798d9dc7de1d64 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Model200Response.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Model200Response.php
index 95c238707cd6f7766dae4372ae456252a9403d26..e6db4af8c7d27796e277f7f1141a4444a170acdd 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Model200Response.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Model200Response.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php
index 9cc0c37d23947857d664cc1a8314ea6d018653f7..26d5c4988fdc801e7f3d0d4b2354191e65837377 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelList.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelList.php
index c6f2fa418f7b02d803c744f03ff9de27120fe390..13195d272566b5e24f3cca31f584d0fabf64c177 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelList.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelList.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php
index 136db271d33818290dfc34b22821b53f50b56915..4fb179c4de981e24c01dcfb9fbe4283b7c30abc3 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Name.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Name.php
index e99ec229be3efa9d7aa40acb6b3c9577123bcef8..d576c3d69fc882da3345ca8806c6019d36305290 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Name.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Name.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php
index 536d505ead351b86ff4d2ca0328e52af180fb412..1cc4acb161683c7d5ea5f592d515cb2c15c6eb65 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php
index d178264a41a9ab6f1d04dd55d6fe4d34238e5654..82f4e7c5c7337d63594bddabc07a8025dbe263b6 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ObjectWithDeprecatedFields.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ObjectWithDeprecatedFields.php
index 7fecb828038151afb0d84d25b42ed9529bcc232f..aaff2f3c3c6a0596e94e074fa5e7b22376d0af52 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ObjectWithDeprecatedFields.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ObjectWithDeprecatedFields.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Order.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Order.php
index 8ce7262cbab3bd0904158c6d831752c861f57fc5..36e32464b2492a95a3431d4f0af6a6f0a59ca125 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Order.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Order.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php
index fe187afea216e6459e77ccc524ea9bbebdfaa042..73660c6e463442f60fd8fa4b68ea8e89595d8a58 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php
index 507b3082ef56e2b57b51f4af5f1cd9da4635389c..1b5bdf7693c4804c1ace1b33e08ccfd12e35032c 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php
index b6dd12bb8b9fd93b4802e1d6e6405e5691d6aa19..8bcebde39893314ab8f932c871ffbb89b6fa7996 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php
index f250dc8a6aa62dc2b95601b7c2fa63396981202b..7575c418afb2d2dad28e67c7f462014da15fd958 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumIntegerDefaultValue.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumIntegerDefaultValue.php
index 955c64ce9aacb8b87c0b0f28aa05524702e61190..65234ea6e1db2f6f240c663bebf9c2ca61ed0ff1 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumIntegerDefaultValue.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumIntegerDefaultValue.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php
index dd50c70fc3d89a563583292f4336aed620659ae5..d370aadf39b90ad6067afd79c73baea93138f753 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php
index 6b9279481c058e10e895a3cd34f139e51678b563..e22f00ae162cbf4ccaffbf16a410e76f09d37b48 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php
index c5a4506ed4a8688f569a238345f9d0a9e50d69c0..cedd0e73d971043dff32c00cce2c6b8508015427 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/SpecialModelName.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/SpecialModelName.php
index f024c4ed581f3a6e824bc19be9a13aaac65a02f0..d77bea39df27d0b4e486f4b0fc2819eadaa84221 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/SpecialModelName.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/SpecialModelName.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php
index 1e28a4712f6b89ed69dd822c2462e48d5adede89..d4284492ed9d8fd7224df72b53845846f11fd859 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/User.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/User.php
index ca9f08769f17a013ec3b9e7405ec95a8d6788842..2626138429079c6a3bd8b9450ee2442d2cdf7470 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/User.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/User.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php b/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php
index b91eafd90796748575dd80e5451dbeb92b704636..017633db769f4bf4a32bed5ad9524a556abeaf5a 100644
--- a/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php
+++ b/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php
@@ -17,7 +17,7 @@
  *
  * The version of the OpenAPI document: 1.0.0
  * Generated by: https://openapi-generator.tech
- * OpenAPI Generator version: 5.3.1
+ * OpenAPI Generator version: 5.4.0-SNAPSHOT
  */
 
 /**
diff --git a/samples/client/petstore/powershell/.openapi-generator/VERSION b/samples/client/petstore/powershell/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/powershell/.openapi-generator/VERSION
+++ b/samples/client/petstore/powershell/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/python-asyncio/.openapi-generator/VERSION b/samples/client/petstore/python-asyncio/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/python-asyncio/.openapi-generator/VERSION
+++ b/samples/client/petstore/python-asyncio/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/python-legacy/.openapi-generator/VERSION b/samples/client/petstore/python-legacy/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/python-legacy/.openapi-generator/VERSION
+++ b/samples/client/petstore/python-legacy/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/python-tornado/.openapi-generator/VERSION b/samples/client/petstore/python-tornado/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/python-tornado/.openapi-generator/VERSION
+++ b/samples/client/petstore/python-tornado/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/python/.openapi-generator/VERSION b/samples/client/petstore/python/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/python/.openapi-generator/VERSION
+++ b/samples/client/petstore/python/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/VERSION b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/VERSION
+++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/ruby-faraday/.openapi-generator/VERSION b/samples/client/petstore/ruby-faraday/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/ruby-faraday/.openapi-generator/VERSION
+++ b/samples/client/petstore/ruby-faraday/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore.rb b/samples/client/petstore/ruby-faraday/lib/petstore.rb
index 2995b750e7aa41504bbf02e6717461911b773576..d9d54916247aa09c10b8c55bfd39cb12eb7fc173 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb
index df802567c94cf50afd52cd54314bb9a5ae91d14f..9535fd15de5ab61c44007c6824021ecedcf0adff 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/default_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/default_api.rb
index 6d11d8773a6078b25bc5b53cd8a86c82a43ac8d9..84d666312ebcf1f83d5e2087398c5ed26ca43456 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/api/default_api.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/default_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb
index 20d12b5c1fed338f9eaf63457d77880a8d3e518e..d7acddef01e227b8d072fdfea4e643e874d6c697 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb
index d00a18a1bf67abf290941c468a24e0c033915b36..9eb20c278b93ae14708fe44f1c9ee4e42febed42 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb
index 08f18cd4f107f3925f2502e30829c488db34e02b..fd4d73299e134ab4f06a1df937629dc6e954ddce 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/store_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/store_api.rb
index 7c9e0fde7aac78664ed7b2441b0d0eadd8c46026..9ebd82ddc89faf72ebe8a3065a9c895f3bb30a65 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/api/store_api.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/store_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/user_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/user_api.rb
index 9687de3f3838aa731c2862f29d0e5b1ecd296d8e..9f6cd55be746350688a599c14652ff04b0dc9b10 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/api/user_api.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/user_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb
index 568dd909fdd49beae39ab3fa44f1cd96b207db1d..f14d04a5b741102854d6ceed447330e4a43f8c23 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb
index a200afcf0a051ccde116d00ed306944348939d92..ebf166152c76e277d444682b92ca3455928d9a0b 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/configuration.rb b/samples/client/petstore/ruby-faraday/lib/petstore/configuration.rb
index b528aef09d7e4fc57e33bf6e0c49007a73a3101f..09143381bc030228be5532ce2d54da60aceaf5e4 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/configuration.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/configuration.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/additional_properties_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/additional_properties_class.rb
index 01f6b001eaf3f2191c58aa8f98f3fa40302a5c2e..6137b4905f42fe6e5736854c9fedbb4f7904a1c8 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/additional_properties_class.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/additional_properties_class.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/animal.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/animal.rb
index 1025187c82be01c762727b27e575ade665d6fcc7..c1d80a23d3ff0fa5436e4043b8ec713c9f3df0d8 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/animal.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/animal.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/api_response.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/api_response.rb
index 1049822b7fcc263ab82bc030cbb7c10098c6b85c..0b9e281f3313f8cad013d4f413e7c3d1f6a890da 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/api_response.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/api_response.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_array_of_number_only.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_array_of_number_only.rb
index 57c603716d6bd0865a71c1375a1162a2760e9ef0..0987e392a59c2c8d2dbfbc3b3aecc8db5fa1c892 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_array_of_number_only.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_array_of_number_only.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_number_only.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_number_only.rb
index 6668a18e932339344824cf71d214bd9df015d187..6e40954d60cf4f7d2d71f7e273215a81f9bfe805 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_number_only.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_number_only.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_test.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_test.rb
index 95cfe89d1692878e845f62e272b42c0cfc5c1ade..eba93689e7bd72966ca68246d01eeea1ee7f56d0 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_test.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_test.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/capitalization.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/capitalization.rb
index db3fd786857e7b91b5366248d46897bd025c4730..a04322c900d3fb49992dbdebc97ad782ad2476ef 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/capitalization.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/capitalization.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb
index 61114303c8abc9cb7ebb6d67b530eb38b28bbbe0..7107968d387d2c4da0caabb1bb2993f5c1f5303d 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb
index 33cb299c2935c196ccd4c8d615d8f21a73497e26..7a2a2ad5f777cd8f8ddf4d8e9bcb06330f3f606d 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/category.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/category.rb
index 447b1573bf86007887c92ad9589b905f64b6ee4e..cf5d1e36c33a1c2c4670a48006fd52059ae041ea 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/category.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/category.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/class_model.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/class_model.rb
index d5c9fef37be39e4d9c9e06bb4080b69f49fa5626..546e54a41fa751d903178d8983b5b5df5f13f8c4 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/class_model.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/class_model.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/client.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/client.rb
index 3314bca5ed1d32c79e292d7bfae134260eb439de..792ea88c609f206004ecfe206d381145cfff0d76 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/client.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/client.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/deprecated_object.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/deprecated_object.rb
index b72cd21b93522b43a8c9b80c438912c2b3457caf..7304906159f17b25a55ee9e49419caa983578f93 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/deprecated_object.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/deprecated_object.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb
index 40987f214ef5344012d50202af1c8897fd80f761..7db02e1cab4f4c4612accf9e07382e07157e25cc 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb
index e5c68f798346fb1393194846be2ba5128324646b..1fb42b5a03d60b57cf8522627e98b8ffd387d604 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb
index 96dfcb24d71b3e95735412b3f948d9d820ae6259..0ffa7fb0f80b9167d6f1929c9215d0ffbafddee1 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_class.rb
index f722acfc1d8e62138628b844ac1668e0c638233d..2afb2753c4f27ee26187e9473be18ca04e218add 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_class.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_class.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_test.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_test.rb
index aedf6b2c7ee1a33965449d8377b44cdaca8b2ddf..bd1304ccf378957c84ef05ebc356cacd87ed4c77 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_test.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_test.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/file.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/file.rb
index f5ae1fed192edcdf274e7a53f9bf6e71a30cb61e..2d0680fa72cefcf938280ada883d4e99f35c8bdd 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/file.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/file.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/file_schema_test_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/file_schema_test_class.rb
index 542d991d5a444ef756f3bc441199f69da64e550d..1a2146a9c6922a43fa3564c8638bbd2766ef5eb2 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/file_schema_test_class.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/file_schema_test_class.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb
index ac18fe7beea23282e42eb415f004a725294af8c2..3ab5660513901abc9dc1e661d68d5b3472fdb66c 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/format_test.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/format_test.rb
index 4410e00a4795bf38a6868298c4cc6be8a4f3c8dd..6a658e35bf0a20691286453e945a2812450dfb91 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/format_test.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/format_test.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/has_only_read_only.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/has_only_read_only.rb
index 9f51cfada96e1a7ccd3801053e7bebbc296be79c..54d25a6f5b7c36172d4caa90131eecfba66e7bb9 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/has_only_read_only.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/has_only_read_only.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/health_check_result.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/health_check_result.rb
index 07be52509fcb6babc566d80f1e76122871b0a0e6..cd53646b938c6646c39401ac1592a6790633ca78 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/health_check_result.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/health_check_result.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/inline_response_default.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/inline_response_default.rb
index 5fc7450bdf47a61e31b2ba48200752a1b2b49a2d..ccd578a9521056532d8b007118589e701029a8b0 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/inline_response_default.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/inline_response_default.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/list.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/list.rb
index a81fe7e5fde87b165acd7efe6dcba06601bf133e..f2c5ec1619d8dad745ac6bd9c10d696c15ac8ab6 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/list.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/list.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/map_test.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/map_test.rb
index 24e2b85e720400ed51b101f67a1d1c4b7c3ea4b2..ffa79e40fea2e35d8f384feb5f7a23cd55830076 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/map_test.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/map_test.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/mixed_properties_and_additional_properties_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/mixed_properties_and_additional_properties_class.rb
index 73e2781755c0d3012a462a0731afbbbc283f5729..543cc1ce5bd461563e14e1a5642e904d64f088cb 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/mixed_properties_and_additional_properties_class.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/mixed_properties_and_additional_properties_class.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/model200_response.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/model200_response.rb
index 91ccd158a13cddf9645ea512eeeeee3b5e783cbb..83b38460ee640435bc5b081065bcfb5db1a7e42f 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/model200_response.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/model200_response.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/model_return.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/model_return.rb
index d71c1f1bd93c9fcc326f718f8538897881378bdb..4ad971483d43a00d5e5db10d637ca0489e880a0c 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/model_return.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/model_return.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/name.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/name.rb
index 86b93dd8b216add1ae2b7141c2e23cc652f6a31e..c313f795169aba618787abac6e0167240173f1cd 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/name.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/name.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/nullable_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/nullable_class.rb
index a41b1ddc084ec5f85803d201bfcc6738d4eecbff..b8a5a96fad67b667d8e30fefdd22b3e9dee13fc5 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/nullable_class.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/nullable_class.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/number_only.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/number_only.rb
index ecd5e5b84192f5777b174ba4352571ef52755791..dba180351b6857f1a1b6be725d9b82b6bfc180fc 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/number_only.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/number_only.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/object_with_deprecated_fields.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/object_with_deprecated_fields.rb
index 25e3b018e287d9e3ab15442005aabbf9a5ae1d2d..da6017f8e464901de1bb5774c4e43ad834856766 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/object_with_deprecated_fields.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/object_with_deprecated_fields.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/order.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/order.rb
index e2cdc7dce110983edc04190204d3c6c8ffa08980..e305739da95a8454f70dfbe09e3065f95a2e3c84 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/order.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/order.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_composite.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_composite.rb
index 0b9b36ea64e547521d53ac9ab6b55206ef016bca..059f08912424010fd108ca04b50787a2d0acec10 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_composite.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_composite.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum.rb
index b2b647d26d5d029cf6af8a42399a4c7713436c34..d3ae94e1d5cfca48b7de571a4f9f93dcfcd1feb9 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_default_value.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_default_value.rb
index 55244dcbcfc152067dc17109a7361e0581bb5732..003c7217c31b6c275b0bbb5299ca30903dd1ea45 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_default_value.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_default_value.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer.rb
index 59419e67fd027803bdafe608245292a853b62362..d4a4fed26d5e1fd5ed8dd51bf001a631284363e4 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer_default_value.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer_default_value.rb
index 6807c7de36fd13ff5156d20177eb15eb77222172..d6079135cfddf64412fe13097bd90dd8f3847b7f 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer_default_value.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer_default_value.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_object_with_enum_property.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_object_with_enum_property.rb
index 4b467b3de03fb709a87f220601de8240a16a3afb..6f4aec9f4a601c0049a2f0c2862dcf2f62951055 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_object_with_enum_property.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_object_with_enum_property.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb
index 410fa168bff7dc779c81fa1bbe8101a05bb95aba..e73b65c3c517ddaf0c98a90df821cc93eea3de59 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/read_only_first.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/read_only_first.rb
index 6f4a5fbd5d2d2084904fc864e7e5625c51b9a90f..4197a2ec616b06bd73af17e3e29f8234aa1e68d7 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/read_only_first.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/read_only_first.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/special_model_name.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/special_model_name.rb
index bad3c1d542cc946dc65a253541f5e9310d801ac1..001d3b3a0b1dc39c87ea19df922392448a40ed0e 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/special_model_name.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/special_model_name.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb
index 166611902eb1d4bc71787babeb45fbd9519f1257..cba58e1df6279eac4ce7be3cb6a6b827a6b237c5 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/user.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/user.rb
index 30e9406bf76bf35055472a24c3bc4383cf362c8c..167953675a3663ea8ed945c695f5be619a0db9ef 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/models/user.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/user.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/version.rb b/samples/client/petstore/ruby-faraday/lib/petstore/version.rb
index 6126a809aaaf0356c8a92a6d653c4298cd1c3ff6..fe6cd38e7ccffa223d37dae85cf8695e4f012411 100644
--- a/samples/client/petstore/ruby-faraday/lib/petstore/version.rb
+++ b/samples/client/petstore/ruby-faraday/lib/petstore/version.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/petstore.gemspec b/samples/client/petstore/ruby-faraday/petstore.gemspec
index b64d60e74118d518bb1a5c536f93068b27311864..eb8fa27ef0897213686546ca691351244772a4f9 100644
--- a/samples/client/petstore/ruby-faraday/petstore.gemspec
+++ b/samples/client/petstore/ruby-faraday/petstore.gemspec
@@ -8,7 +8,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/spec/api_client_spec.rb b/samples/client/petstore/ruby-faraday/spec/api_client_spec.rb
index 99b44ba5730a4af1b9610efd585f2f9df7681dec..d47987c12a6b874d86d04ed807f7bf4cff4b7395 100644
--- a/samples/client/petstore/ruby-faraday/spec/api_client_spec.rb
+++ b/samples/client/petstore/ruby-faraday/spec/api_client_spec.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/spec/configuration_spec.rb b/samples/client/petstore/ruby-faraday/spec/configuration_spec.rb
index 9a36ef93379f5b51ecec9f666946c8ebf8363bf5..f7eceea4ec30e57226379cfd11e4d63f305d70ec 100644
--- a/samples/client/petstore/ruby-faraday/spec/configuration_spec.rb
+++ b/samples/client/petstore/ruby-faraday/spec/configuration_spec.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby-faraday/spec/spec_helper.rb b/samples/client/petstore/ruby-faraday/spec/spec_helper.rb
index 389cc910f06fcedb2a7d3b03c23ed3de92ddc626..d90940c63b52e3c8c685309ca0e3d04fbae51d3e 100644
--- a/samples/client/petstore/ruby-faraday/spec/spec_helper.rb
+++ b/samples/client/petstore/ruby-faraday/spec/spec_helper.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/.openapi-generator/VERSION b/samples/client/petstore/ruby/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/ruby/.openapi-generator/VERSION
+++ b/samples/client/petstore/ruby/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/ruby/lib/petstore.rb b/samples/client/petstore/ruby/lib/petstore.rb
index 2995b750e7aa41504bbf02e6717461911b773576..d9d54916247aa09c10b8c55bfd39cb12eb7fc173 100644
--- a/samples/client/petstore/ruby/lib/petstore.rb
+++ b/samples/client/petstore/ruby/lib/petstore.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb b/samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb
index df802567c94cf50afd52cd54314bb9a5ae91d14f..9535fd15de5ab61c44007c6824021ecedcf0adff 100644
--- a/samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb
+++ b/samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/api/default_api.rb b/samples/client/petstore/ruby/lib/petstore/api/default_api.rb
index 6d11d8773a6078b25bc5b53cd8a86c82a43ac8d9..84d666312ebcf1f83d5e2087398c5ed26ca43456 100644
--- a/samples/client/petstore/ruby/lib/petstore/api/default_api.rb
+++ b/samples/client/petstore/ruby/lib/petstore/api/default_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb b/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb
index 20d12b5c1fed338f9eaf63457d77880a8d3e518e..d7acddef01e227b8d072fdfea4e643e874d6c697 100644
--- a/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb
+++ b/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb b/samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb
index d00a18a1bf67abf290941c468a24e0c033915b36..9eb20c278b93ae14708fe44f1c9ee4e42febed42 100644
--- a/samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb
+++ b/samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb
index 9d828b5f6d9ec8a5f87285f0aae9a05ab423ce26..0014c5b78a0ddd5faec182316578a3a5370a32e7 100644
--- a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb
+++ b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb
index 50be6c0e15038dbe9c82d8dbb5ce93da2834a2b5..becfae6e1b7c6ccd61957aca11e6eac6246e4316 100644
--- a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb
+++ b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb
index fd7106e359837a05101c2f94b383afbf0768369b..5a550ce47ee3398107a7939226c11994e94c1493 100644
--- a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb
+++ b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/api_client.rb b/samples/client/petstore/ruby/lib/petstore/api_client.rb
index 8ab8f8520ca6bf359c0fdafacd7dca86f6cd471e..7cf4a5d85ebb94c1186175f63fa7a5091c36bd78 100644
--- a/samples/client/petstore/ruby/lib/petstore/api_client.rb
+++ b/samples/client/petstore/ruby/lib/petstore/api_client.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/api_error.rb b/samples/client/petstore/ruby/lib/petstore/api_error.rb
index a200afcf0a051ccde116d00ed306944348939d92..ebf166152c76e277d444682b92ca3455928d9a0b 100644
--- a/samples/client/petstore/ruby/lib/petstore/api_error.rb
+++ b/samples/client/petstore/ruby/lib/petstore/api_error.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/configuration.rb b/samples/client/petstore/ruby/lib/petstore/configuration.rb
index 4ee7fe94f349cc8fce7920872fa211fa0ce19400..6c934e35bff304ddd8680d49adb2cf5a08d343dd 100644
--- a/samples/client/petstore/ruby/lib/petstore/configuration.rb
+++ b/samples/client/petstore/ruby/lib/petstore/configuration.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/additional_properties_class.rb b/samples/client/petstore/ruby/lib/petstore/models/additional_properties_class.rb
index 01f6b001eaf3f2191c58aa8f98f3fa40302a5c2e..6137b4905f42fe6e5736854c9fedbb4f7904a1c8 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/additional_properties_class.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/additional_properties_class.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/animal.rb b/samples/client/petstore/ruby/lib/petstore/models/animal.rb
index 1025187c82be01c762727b27e575ade665d6fcc7..c1d80a23d3ff0fa5436e4043b8ec713c9f3df0d8 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/animal.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/animal.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/api_response.rb b/samples/client/petstore/ruby/lib/petstore/models/api_response.rb
index 1049822b7fcc263ab82bc030cbb7c10098c6b85c..0b9e281f3313f8cad013d4f413e7c3d1f6a890da 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/api_response.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/api_response.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/array_of_array_of_number_only.rb b/samples/client/petstore/ruby/lib/petstore/models/array_of_array_of_number_only.rb
index 57c603716d6bd0865a71c1375a1162a2760e9ef0..0987e392a59c2c8d2dbfbc3b3aecc8db5fa1c892 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/array_of_array_of_number_only.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/array_of_array_of_number_only.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/array_of_number_only.rb b/samples/client/petstore/ruby/lib/petstore/models/array_of_number_only.rb
index 6668a18e932339344824cf71d214bd9df015d187..6e40954d60cf4f7d2d71f7e273215a81f9bfe805 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/array_of_number_only.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/array_of_number_only.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/array_test.rb b/samples/client/petstore/ruby/lib/petstore/models/array_test.rb
index 95cfe89d1692878e845f62e272b42c0cfc5c1ade..eba93689e7bd72966ca68246d01eeea1ee7f56d0 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/array_test.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/array_test.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/capitalization.rb b/samples/client/petstore/ruby/lib/petstore/models/capitalization.rb
index db3fd786857e7b91b5366248d46897bd025c4730..a04322c900d3fb49992dbdebc97ad782ad2476ef 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/capitalization.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/capitalization.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/cat.rb b/samples/client/petstore/ruby/lib/petstore/models/cat.rb
index 61114303c8abc9cb7ebb6d67b530eb38b28bbbe0..7107968d387d2c4da0caabb1bb2993f5c1f5303d 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/cat.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/cat.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb b/samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb
index 33cb299c2935c196ccd4c8d615d8f21a73497e26..7a2a2ad5f777cd8f8ddf4d8e9bcb06330f3f606d 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/category.rb b/samples/client/petstore/ruby/lib/petstore/models/category.rb
index 447b1573bf86007887c92ad9589b905f64b6ee4e..cf5d1e36c33a1c2c4670a48006fd52059ae041ea 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/category.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/category.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/class_model.rb b/samples/client/petstore/ruby/lib/petstore/models/class_model.rb
index d5c9fef37be39e4d9c9e06bb4080b69f49fa5626..546e54a41fa751d903178d8983b5b5df5f13f8c4 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/class_model.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/class_model.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/client.rb b/samples/client/petstore/ruby/lib/petstore/models/client.rb
index 3314bca5ed1d32c79e292d7bfae134260eb439de..792ea88c609f206004ecfe206d381145cfff0d76 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/client.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/client.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/deprecated_object.rb b/samples/client/petstore/ruby/lib/petstore/models/deprecated_object.rb
index b72cd21b93522b43a8c9b80c438912c2b3457caf..7304906159f17b25a55ee9e49419caa983578f93 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/deprecated_object.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/deprecated_object.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/dog.rb b/samples/client/petstore/ruby/lib/petstore/models/dog.rb
index 40987f214ef5344012d50202af1c8897fd80f761..7db02e1cab4f4c4612accf9e07382e07157e25cc 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/dog.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/dog.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb b/samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb
index e5c68f798346fb1393194846be2ba5128324646b..1fb42b5a03d60b57cf8522627e98b8ffd387d604 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb b/samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb
index 96dfcb24d71b3e95735412b3f948d9d820ae6259..0ffa7fb0f80b9167d6f1929c9215d0ffbafddee1 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/enum_class.rb b/samples/client/petstore/ruby/lib/petstore/models/enum_class.rb
index f722acfc1d8e62138628b844ac1668e0c638233d..2afb2753c4f27ee26187e9473be18ca04e218add 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/enum_class.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/enum_class.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/enum_test.rb b/samples/client/petstore/ruby/lib/petstore/models/enum_test.rb
index aedf6b2c7ee1a33965449d8377b44cdaca8b2ddf..bd1304ccf378957c84ef05ebc356cacd87ed4c77 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/enum_test.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/enum_test.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/file.rb b/samples/client/petstore/ruby/lib/petstore/models/file.rb
index f5ae1fed192edcdf274e7a53f9bf6e71a30cb61e..2d0680fa72cefcf938280ada883d4e99f35c8bdd 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/file.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/file.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/file_schema_test_class.rb b/samples/client/petstore/ruby/lib/petstore/models/file_schema_test_class.rb
index 542d991d5a444ef756f3bc441199f69da64e550d..1a2146a9c6922a43fa3564c8638bbd2766ef5eb2 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/file_schema_test_class.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/file_schema_test_class.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/foo.rb b/samples/client/petstore/ruby/lib/petstore/models/foo.rb
index ac18fe7beea23282e42eb415f004a725294af8c2..3ab5660513901abc9dc1e661d68d5b3472fdb66c 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/foo.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/foo.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/format_test.rb b/samples/client/petstore/ruby/lib/petstore/models/format_test.rb
index 4410e00a4795bf38a6868298c4cc6be8a4f3c8dd..6a658e35bf0a20691286453e945a2812450dfb91 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/format_test.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/format_test.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/has_only_read_only.rb b/samples/client/petstore/ruby/lib/petstore/models/has_only_read_only.rb
index 9f51cfada96e1a7ccd3801053e7bebbc296be79c..54d25a6f5b7c36172d4caa90131eecfba66e7bb9 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/has_only_read_only.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/has_only_read_only.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/health_check_result.rb b/samples/client/petstore/ruby/lib/petstore/models/health_check_result.rb
index 07be52509fcb6babc566d80f1e76122871b0a0e6..cd53646b938c6646c39401ac1592a6790633ca78 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/health_check_result.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/health_check_result.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/inline_response_default.rb b/samples/client/petstore/ruby/lib/petstore/models/inline_response_default.rb
index 5fc7450bdf47a61e31b2ba48200752a1b2b49a2d..ccd578a9521056532d8b007118589e701029a8b0 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/inline_response_default.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/inline_response_default.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/list.rb b/samples/client/petstore/ruby/lib/petstore/models/list.rb
index a81fe7e5fde87b165acd7efe6dcba06601bf133e..f2c5ec1619d8dad745ac6bd9c10d696c15ac8ab6 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/list.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/list.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/map_test.rb b/samples/client/petstore/ruby/lib/petstore/models/map_test.rb
index 24e2b85e720400ed51b101f67a1d1c4b7c3ea4b2..ffa79e40fea2e35d8f384feb5f7a23cd55830076 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/map_test.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/map_test.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/mixed_properties_and_additional_properties_class.rb b/samples/client/petstore/ruby/lib/petstore/models/mixed_properties_and_additional_properties_class.rb
index 73e2781755c0d3012a462a0731afbbbc283f5729..543cc1ce5bd461563e14e1a5642e904d64f088cb 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/mixed_properties_and_additional_properties_class.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/mixed_properties_and_additional_properties_class.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/model200_response.rb b/samples/client/petstore/ruby/lib/petstore/models/model200_response.rb
index 91ccd158a13cddf9645ea512eeeeee3b5e783cbb..83b38460ee640435bc5b081065bcfb5db1a7e42f 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/model200_response.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/model200_response.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/model_return.rb b/samples/client/petstore/ruby/lib/petstore/models/model_return.rb
index d71c1f1bd93c9fcc326f718f8538897881378bdb..4ad971483d43a00d5e5db10d637ca0489e880a0c 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/model_return.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/model_return.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/name.rb b/samples/client/petstore/ruby/lib/petstore/models/name.rb
index 86b93dd8b216add1ae2b7141c2e23cc652f6a31e..c313f795169aba618787abac6e0167240173f1cd 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/name.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/name.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/nullable_class.rb b/samples/client/petstore/ruby/lib/petstore/models/nullable_class.rb
index a41b1ddc084ec5f85803d201bfcc6738d4eecbff..b8a5a96fad67b667d8e30fefdd22b3e9dee13fc5 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/nullable_class.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/nullable_class.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/number_only.rb b/samples/client/petstore/ruby/lib/petstore/models/number_only.rb
index ecd5e5b84192f5777b174ba4352571ef52755791..dba180351b6857f1a1b6be725d9b82b6bfc180fc 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/number_only.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/number_only.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/object_with_deprecated_fields.rb b/samples/client/petstore/ruby/lib/petstore/models/object_with_deprecated_fields.rb
index 25e3b018e287d9e3ab15442005aabbf9a5ae1d2d..da6017f8e464901de1bb5774c4e43ad834856766 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/object_with_deprecated_fields.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/object_with_deprecated_fields.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/order.rb b/samples/client/petstore/ruby/lib/petstore/models/order.rb
index e2cdc7dce110983edc04190204d3c6c8ffa08980..e305739da95a8454f70dfbe09e3065f95a2e3c84 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/order.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/order.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_composite.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_composite.rb
index 0b9b36ea64e547521d53ac9ab6b55206ef016bca..059f08912424010fd108ca04b50787a2d0acec10 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/outer_composite.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/outer_composite.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb
index b2b647d26d5d029cf6af8a42399a4c7713436c34..d3ae94e1d5cfca48b7de571a4f9f93dcfcd1feb9 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_default_value.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_default_value.rb
index 55244dcbcfc152067dc17109a7361e0581bb5732..003c7217c31b6c275b0bbb5299ca30903dd1ea45 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_default_value.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_default_value.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer.rb
index 59419e67fd027803bdafe608245292a853b62362..d4a4fed26d5e1fd5ed8dd51bf001a631284363e4 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer_default_value.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer_default_value.rb
index 6807c7de36fd13ff5156d20177eb15eb77222172..d6079135cfddf64412fe13097bd90dd8f3847b7f 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer_default_value.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer_default_value.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_object_with_enum_property.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_object_with_enum_property.rb
index 4b467b3de03fb709a87f220601de8240a16a3afb..6f4aec9f4a601c0049a2f0c2862dcf2f62951055 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/outer_object_with_enum_property.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/outer_object_with_enum_property.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/pet.rb b/samples/client/petstore/ruby/lib/petstore/models/pet.rb
index 410fa168bff7dc779c81fa1bbe8101a05bb95aba..e73b65c3c517ddaf0c98a90df821cc93eea3de59 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/pet.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/pet.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/read_only_first.rb b/samples/client/petstore/ruby/lib/petstore/models/read_only_first.rb
index 6f4a5fbd5d2d2084904fc864e7e5625c51b9a90f..4197a2ec616b06bd73af17e3e29f8234aa1e68d7 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/read_only_first.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/read_only_first.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/special_model_name.rb b/samples/client/petstore/ruby/lib/petstore/models/special_model_name.rb
index bad3c1d542cc946dc65a253541f5e9310d801ac1..001d3b3a0b1dc39c87ea19df922392448a40ed0e 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/special_model_name.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/special_model_name.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/tag.rb b/samples/client/petstore/ruby/lib/petstore/models/tag.rb
index 166611902eb1d4bc71787babeb45fbd9519f1257..cba58e1df6279eac4ce7be3cb6a6b827a6b237c5 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/tag.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/tag.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/models/user.rb b/samples/client/petstore/ruby/lib/petstore/models/user.rb
index 30e9406bf76bf35055472a24c3bc4383cf362c8c..167953675a3663ea8ed945c695f5be619a0db9ef 100644
--- a/samples/client/petstore/ruby/lib/petstore/models/user.rb
+++ b/samples/client/petstore/ruby/lib/petstore/models/user.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/lib/petstore/version.rb b/samples/client/petstore/ruby/lib/petstore/version.rb
index 6126a809aaaf0356c8a92a6d653c4298cd1c3ff6..fe6cd38e7ccffa223d37dae85cf8695e4f012411 100644
--- a/samples/client/petstore/ruby/lib/petstore/version.rb
+++ b/samples/client/petstore/ruby/lib/petstore/version.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/petstore.gemspec b/samples/client/petstore/ruby/petstore.gemspec
index 846cb3e9f93fbf8716cb883125bd207def7c6c1a..869a27cff67a5906b254939877b4bf5c9fa7dd71 100644
--- a/samples/client/petstore/ruby/petstore.gemspec
+++ b/samples/client/petstore/ruby/petstore.gemspec
@@ -8,7 +8,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/spec/api_client_spec.rb b/samples/client/petstore/ruby/spec/api_client_spec.rb
index 04d9cc79cd48a525c201c3f33a4424e8bd6e6e1b..48ef4c890a005596eb3454821627fbc812afa58e 100644
--- a/samples/client/petstore/ruby/spec/api_client_spec.rb
+++ b/samples/client/petstore/ruby/spec/api_client_spec.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/spec/configuration_spec.rb b/samples/client/petstore/ruby/spec/configuration_spec.rb
index 9a36ef93379f5b51ecec9f666946c8ebf8363bf5..f7eceea4ec30e57226379cfd11e4d63f305d70ec 100644
--- a/samples/client/petstore/ruby/spec/configuration_spec.rb
+++ b/samples/client/petstore/ruby/spec/configuration_spec.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/ruby/spec/spec_helper.rb b/samples/client/petstore/ruby/spec/spec_helper.rb
index 389cc910f06fcedb2a7d3b03c23ed3de92ddc626..d90940c63b52e3c8c685309ca0e3d04fbae51d3e 100644
--- a/samples/client/petstore/ruby/spec/spec_helper.rb
+++ b/samples/client/petstore/ruby/spec/spec_helper.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/client/petstore/rust/hyper/petstore/.openapi-generator/VERSION b/samples/client/petstore/rust/hyper/petstore/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/rust/hyper/petstore/.openapi-generator/VERSION
+++ b/samples/client/petstore/rust/hyper/petstore/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/rust/reqwest/petstore-async/.openapi-generator/VERSION b/samples/client/petstore/rust/reqwest/petstore-async/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/rust/reqwest/petstore-async/.openapi-generator/VERSION
+++ b/samples/client/petstore/rust/reqwest/petstore-async/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/rust/reqwest/petstore/.openapi-generator/VERSION b/samples/client/petstore/rust/reqwest/petstore/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/rust/reqwest/petstore/.openapi-generator/VERSION
+++ b/samples/client/petstore/rust/reqwest/petstore/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/scala-akka/.openapi-generator/VERSION b/samples/client/petstore/scala-akka/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/scala-akka/.openapi-generator/VERSION
+++ b/samples/client/petstore/scala-akka/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/scala-httpclient-deprecated/.openapi-generator/VERSION b/samples/client/petstore/scala-httpclient-deprecated/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/scala-httpclient-deprecated/.openapi-generator/VERSION
+++ b/samples/client/petstore/scala-httpclient-deprecated/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/scala-sttp/.openapi-generator/VERSION b/samples/client/petstore/scala-sttp/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/scala-sttp/.openapi-generator/VERSION
+++ b/samples/client/petstore/scala-sttp/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/spring-cloud-async/.openapi-generator/VERSION b/samples/client/petstore/spring-cloud-async/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/spring-cloud-async/.openapi-generator/VERSION
+++ b/samples/client/petstore/spring-cloud-async/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/spring-cloud-async/pom.xml b/samples/client/petstore/spring-cloud-async/pom.xml
index 254a8357fce7ef52b95a62a4b3b8cb4ce8285b4f..6b400a3539feb5882ff3e5b4981e7ab79278087e 100644
--- a/samples/client/petstore/spring-cloud-async/pom.xml
+++ b/samples/client/petstore/spring-cloud-async/pom.xml
@@ -9,12 +9,13 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <swagger-core-version>1.5.18</swagger-core-version>
+        <swagger-core-version>1.6.3</swagger-core-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.5.5</version>
+        <version>2.6.2</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -25,7 +26,7 @@
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-starter-parent</artifactId>
-                <version>2020.0.4</version>
+                <version>2021.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
@@ -33,10 +34,11 @@
     </dependencyManagement>
 
     <dependencies>
+        <!--SpringFox dependencies -->
         <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>${swagger-core-version}</version>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>${springfox.version}</version>
         </dependency>
         <!-- @Nullable annotation -->
         <dependency>
@@ -60,26 +62,20 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.hibernate.validator</groupId>
-            <artifactId>hibernate-validator</artifactId>
-            <version>6.0.16.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>3.0.0</version>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-commons</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java
index b87ed4065e3484ea6bd7eeb3b25e186dcbc923f1..ff55cadf21fc3dc792ca80ed0279de99cf5e255f 100644
--- a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -33,23 +33,29 @@ public interface PetApi {
      * @param body Pet object that needs to be added to the store (required)
      * @return Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = "application/json"
     )
     CompletableFuture<ResponseEntity<Void>> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body);
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    );
 
 
     /**
@@ -59,24 +65,29 @@ public interface PetApi {
      * @param apiKey  (optional)
      * @return Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    CompletableFuture<ResponseEntity<Void>> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-);
+    CompletableFuture<ResponseEntity<Void>> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    );
 
 
     /**
@@ -87,25 +98,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = "application/json"
     )
-    CompletableFuture<ResponseEntity<List<Pet>>> 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) List<String> status
-
-);
+    CompletableFuture<ResponseEntity<List<Pet>>> 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) List<String> status
+    );
 
 
     /**
@@ -117,25 +135,32 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = "application/json"
     )
-    CompletableFuture<ResponseEntity<List<Pet>>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
-
-);
+    CompletableFuture<ResponseEntity<List<Pet>>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
+    );
 
 
     /**
@@ -147,26 +172,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = "application/json"
     )
-    CompletableFuture<ResponseEntity<Pet>> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-);
+    CompletableFuture<ResponseEntity<Pet>> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    );
 
 
     /**
@@ -177,27 +205,31 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = "application/json"
     )
     CompletableFuture<ResponseEntity<Void>> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body);
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    );
 
 
     /**
@@ -208,27 +240,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = "application/x-www-form-urlencoded"
     )
-    CompletableFuture<ResponseEntity<Void>> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet" ) @RequestParam(value="name", required=false)  String name,
-
-@ApiParam(value = "Updated status of the pet" ) @RequestParam(value="status", required=false)  String status);
+    CompletableFuture<ResponseEntity<Void>> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @RequestParam(value="name", required=false) String name,
+        @ApiParam(value = "Updated status of the pet") @RequestParam(value="status", required=false) String status
+    );
 
 
     /**
@@ -239,27 +275,32 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = "application/json",
         consumes = "multipart/form-data"
     )
-    CompletableFuture<ResponseEntity<ModelApiResponse>> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server" ) @RequestParam(value="additionalMetadata", required=false)  String additionalMetadata,
-
-@ApiParam(value = "file to upload") @RequestParam("file") MultipartFile file);
+    CompletableFuture<ResponseEntity<ModelApiResponse>> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @RequestParam(value="additionalMetadata", required=false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestParam("file") MultipartFile file
+    );
 
 }
diff --git a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java
index e6e78df20524ca451e0816a4e09b6ff9e1db414e..f968f9607750e72af114d63bf8cfdb90383f5868 100644
--- a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -35,20 +35,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{orderId}"
     )
-    CompletableFuture<ResponseEntity<Void>> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("orderId") String orderId
-
-);
+    CompletableFuture<ResponseEntity<Void>> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("orderId") String orderId
+    );
 
 
     /**
@@ -57,20 +60,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = "application/json"
     )
-    CompletableFuture<ResponseEntity<Map<String, Integer>>> getInventory();
+    CompletableFuture<ResponseEntity<Map<String, Integer>>> getInventory(
+        
+    );
 
 
     /**
@@ -82,23 +93,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{orderId}",
         produces = "application/json"
     )
-    CompletableFuture<ResponseEntity<Order>> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("orderId") Long orderId
-
-);
+    CompletableFuture<ResponseEntity<Order>> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("orderId") Long orderId
+    );
 
 
     /**
@@ -108,20 +122,24 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = "application/json"
     )
     CompletableFuture<ResponseEntity<Order>> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body);
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    );
 
 }
diff --git a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java
index efcfdfa6bd97ead2a62cb412ea12c6efba648b19..5ca513e5ffea66361220b98451ecde38769071c8 100644
--- a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -35,18 +35,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     CompletableFuture<ResponseEntity<Void>> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body);
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    );
 
 
     /**
@@ -55,18 +59,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     CompletableFuture<ResponseEntity<Void>> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body);
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    );
 
 
     /**
@@ -75,18 +83,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     CompletableFuture<ResponseEntity<Void>> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body);
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    );
 
 
     /**
@@ -97,20 +109,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    CompletableFuture<ResponseEntity<Void>> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-);
+    CompletableFuture<ResponseEntity<Void>> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    );
 
 
     /**
@@ -121,23 +136,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = "application/json"
     )
-    CompletableFuture<ResponseEntity<User>> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-);
+    CompletableFuture<ResponseEntity<User>> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    );
 
 
     /**
@@ -148,23 +166,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = "application/json"
     )
-    CompletableFuture<ResponseEntity<String>> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-);
+    CompletableFuture<ResponseEntity<String>> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    );
 
 
     /**
@@ -172,16 +193,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    CompletableFuture<ResponseEntity<Void>> logoutUser();
+    CompletableFuture<ResponseEntity<Void>> logoutUser(
+        
+    );
 
 
     /**
@@ -193,21 +220,23 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    CompletableFuture<ResponseEntity<Void>> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body);
+    CompletableFuture<ResponseEntity<Void>> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    );
 
 }
diff --git a/samples/client/petstore/spring-cloud-date-time/.openapi-generator-ignore b/samples/client/petstore/spring-cloud-date-time/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/client/petstore/spring-cloud-date-time/.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/client/petstore/spring-cloud-date-time/.openapi-generator/FILES b/samples/client/petstore/spring-cloud-date-time/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..0849e5aac50a63660b4cf3a0f6b3b8fa5e8b1bcd
--- /dev/null
+++ b/samples/client/petstore/spring-cloud-date-time/.openapi-generator/FILES
@@ -0,0 +1,3 @@
+README.md
+pom.xml
+src/main/java/org/openapitools/api/DefaultApi.java
diff --git a/samples/client/petstore/spring-cloud-date-time/.openapi-generator/VERSION b/samples/client/petstore/spring-cloud-date-time/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..0984c4c1ad213d3a352049ad557efc9bd5140752
--- /dev/null
+++ b/samples/client/petstore/spring-cloud-date-time/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/spring-cloud-date-time/README.md b/samples/client/petstore/spring-cloud-date-time/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a462be951ace6611621bc537aacd573e4486a38a
--- /dev/null
+++ b/samples/client/petstore/spring-cloud-date-time/README.md
@@ -0,0 +1,26 @@
+# OpenAPI generated API stub
+
+Spring Framework stub
+
+
+## Overview
+This code was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
+By using the [OpenAPI-Spec](https://openapis.org), you can easily generate an API stub.
+This is an example of building API stub interfaces in Java using the Spring framework.
+
+The stubs generated can be used in your existing Spring-MVC or Spring-Boot application to create controller endpoints
+by adding ```@Controller``` classes that implement the interface. Eg:
+```java
+@Controller
+public class PetController implements PetApi {
+// implement all PetApi methods
+}
+```
+
+You can also use the interface to create [Spring-Cloud Feign clients](http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign-inheritance).Eg:
+```java
+@FeignClient(name="pet", url="http://petstore.swagger.io/v2")
+public interface PetClient extends PetApi {
+
+}
+```
diff --git a/samples/client/petstore/spring-cloud-date-time/pom.xml b/samples/client/petstore/spring-cloud-date-time/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c01b2969fb37abe335e37e849dbb92e867fa5b72
--- /dev/null
+++ b/samples/client/petstore/spring-cloud-date-time/pom.xml
@@ -0,0 +1,81 @@
+<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>spring-cloud-date-time</artifactId>
+    <packaging>jar</packaging>
+    <name>spring-cloud-date-time</name>
+    <version>1.0</version>
+    <properties>
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>1.6.3</swagger-core-version>
+        <springfox.version>2.9.2</springfox.version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.6.2</version>
+    </parent>
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+    </build>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-starter-parent</artifactId>
+                <version>2021.0.0</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <!--SpringFox dependencies -->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>${springfox.version}</version>
+        </dependency>
+        <!-- @Nullable annotation -->
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-oauth2</artifactId>
+            <version>2.2.5.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>0.2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/samples/client/petstore/spring-cloud-date-time/src/main/java/org/openapitools/api/DefaultApi.java b/samples/client/petstore/spring-cloud-date-time/src/main/java/org/openapitools/api/DefaultApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..54e556cb9ed24520508f313717cf855ce94b7c8d
--- /dev/null
+++ b/samples/client/petstore/spring-cloud-date-time/src/main/java/org/openapitools/api/DefaultApi.java
@@ -0,0 +1,86 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import io.swagger.annotations.*;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Api(value = "Default", description = "the Default API")
+public interface DefaultApi {
+
+    /**
+     * GET /thingy/{date}
+     *
+     * @param date A date path parameter (required)
+     * @param dateTime A date-time query parameter (required)
+     * @param xOrderDate A date header parameter (required)
+     * @param loginDate A date cookie parameter (optional)
+     * @return OK (status code 200)
+     */
+    @ApiOperation(
+        tags = {  },
+        value = "",
+        nickname = "get",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "OK")
+    })
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/thingy/{date}"
+    )
+    ResponseEntity<Void> get(
+        @ApiParam(value = "A date path parameter", required = true) @PathVariable("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @NotNull @ApiParam(value = "A date-time query parameter", required = true) @Valid @RequestParam(value = "dateTime", required = true) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "A date header parameter", required = true) @RequestHeader(value = "X-Order-Date", required = true) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate xOrderDate,
+        @ApiParam(value = "A date cookie parameter") @CookieValue("loginDate") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate loginDate
+    );
+
+
+    /**
+     * POST /thingy/{date}
+     * update with form data
+     *
+     * @param date A date path parameter (required)
+     * @param visitDate Updated last vist timestamp (optional)
+     * @return Invalid input (status code 405)
+     */
+    @ApiOperation(
+        tags = {  },
+        value = "",
+        nickname = "updatePetWithForm",
+        notes = "update with form data"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/thingy/{date}",
+        consumes = "application/x-www-form-urlencoded"
+    )
+    ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "A date path parameter", required = true) @PathVariable("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "Updated last vist timestamp") @RequestParam(value="visitDate", required=false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime visitDate
+    );
+
+}
diff --git a/samples/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION b/samples/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION
+++ b/samples/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/spring-cloud-spring-pageable/pom.xml b/samples/client/petstore/spring-cloud-spring-pageable/pom.xml
index 4d47a486422475bbfe2ca2ecd30bc9009722f6b2..622e4334036fa997ccb89f67f581e6d9bbfe975e 100644
--- a/samples/client/petstore/spring-cloud-spring-pageable/pom.xml
+++ b/samples/client/petstore/spring-cloud-spring-pageable/pom.xml
@@ -9,12 +9,13 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <swagger-core-version>1.5.18</swagger-core-version>
+        <swagger-core-version>1.6.3</swagger-core-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.5.5</version>
+        <version>2.6.2</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -25,7 +26,7 @@
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-starter-parent</artifactId>
-                <version>2020.0.4</version>
+                <version>2021.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
@@ -33,10 +34,11 @@
     </dependencyManagement>
 
     <dependencies>
+        <!--SpringFox dependencies -->
         <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>${swagger-core-version}</version>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>${springfox.version}</version>
         </dependency>
         <!-- @Nullable annotation -->
         <dependency>
@@ -60,26 +62,20 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.hibernate.validator</groupId>
-            <artifactId>hibernate-validator</artifactId>
-            <version>6.0.16.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>3.0.0</version>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-commons</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java
index 785314b56f9180dbd75300b3bebfe0368fe1bbc1..ac82a073506d85b50cddd9c996122d19dd662f1c 100644
--- a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -32,23 +32,29 @@ public interface PetApi {
      * @param body Pet object that needs to be added to the store (required)
      * @return Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = "application/json"
     )
     ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body);
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    );
 
 
     /**
@@ -58,24 +64,29 @@ public interface PetApi {
      * @param apiKey  (optional)
      * @return Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-);
+    ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    );
 
 
     /**
@@ -86,25 +97,33 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = "application/json"
     )
-    ResponseEntity<List<Pet>> 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) List<String> status
-
-, @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable);
+    ResponseEntity<List<Pet>> 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) List<String> status,
+        @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable
+    );
 
 
     /**
@@ -116,25 +135,33 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = "application/json"
     )
-    ResponseEntity<List<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
-
-, @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable);
+    ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags,
+        @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable
+    );
 
 
     /**
@@ -146,26 +173,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = "application/json"
     )
-    ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-);
+    ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    );
 
 
     /**
@@ -176,27 +206,31 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = "application/json"
     )
     ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body);
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    );
 
 
     /**
@@ -207,27 +241,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = "application/x-www-form-urlencoded"
     )
-    ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet" ) @RequestParam(value="name", required=false)  String name,
-
-@ApiParam(value = "Updated status of the pet" ) @RequestParam(value="status", required=false)  String status);
+    ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @RequestParam(value="name", required=false) String name,
+        @ApiParam(value = "Updated status of the pet") @RequestParam(value="status", required=false) String status
+    );
 
 
     /**
@@ -238,27 +276,32 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = "application/json",
         consumes = "multipart/form-data"
     )
-    ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server" ) @RequestParam(value="additionalMetadata", required=false)  String additionalMetadata,
-
-@ApiParam(value = "file to upload") @RequestParam("file") MultipartFile file);
+    ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @RequestParam(value="additionalMetadata", required=false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestParam("file") MultipartFile file
+    );
 
 }
diff --git a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java
index 28845958d64aa2e93f23abf6654b9c89e11e3227..b4b4df33915506efccad2c25eca3106450647237 100644
--- a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -34,20 +34,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{orderId}"
     )
-    ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("orderId") String orderId
-
-);
+    ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("orderId") String orderId
+    );
 
 
     /**
@@ -56,20 +59,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = "application/json"
     )
-    ResponseEntity<Map<String, Integer>> getInventory();
+    ResponseEntity<Map<String, Integer>> getInventory(
+        
+    );
 
 
     /**
@@ -81,23 +92,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{orderId}",
         produces = "application/json"
     )
-    ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("orderId") Long orderId
-
-);
+    ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("orderId") Long orderId
+    );
 
 
     /**
@@ -107,20 +121,24 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = "application/json"
     )
     ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body);
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    );
 
 }
diff --git a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java
index 9105efb7a327d8f583371ac54fe0cf74fbe8c94f..fdd47d7f560c1e1d52872058ef77bf36dbedb4ae 100644
--- a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -34,18 +34,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body);
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    );
 
 
     /**
@@ -54,18 +58,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body);
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    );
 
 
     /**
@@ -74,18 +82,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body);
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    );
 
 
     /**
@@ -96,20 +108,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-);
+    ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    );
 
 
     /**
@@ -120,23 +135,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = "application/json"
     )
-    ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-);
+    ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    );
 
 
     /**
@@ -147,23 +165,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = "application/json"
     )
-    ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-);
+    ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    );
 
 
     /**
@@ -171,16 +192,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    ResponseEntity<Void> logoutUser();
+    ResponseEntity<Void> logoutUser(
+        
+    );
 
 
     /**
@@ -188,16 +215,22 @@ public interface UserApi {
      *
      * @return endpoint configuration response (status code 200)
      */
-
-    @ApiOperation(value = "logoutUserOptions", nickname = "logoutUserOptions", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "endpoint configuration response") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "logoutUserOptions",
+        nickname = "logoutUserOptions",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "endpoint configuration response")
+    })
     @RequestMapping(
         method = RequestMethod.OPTIONS,
         value = "/user/logout"
     )
-    ResponseEntity<Void> logoutUserOptions();
+    ResponseEntity<Void> logoutUserOptions(
+        
+    );
 
 
     /**
@@ -209,21 +242,23 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body);
+    ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    );
 
 }
diff --git a/samples/client/petstore/spring-cloud/.openapi-generator/VERSION b/samples/client/petstore/spring-cloud/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/spring-cloud/.openapi-generator/VERSION
+++ b/samples/client/petstore/spring-cloud/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/spring-cloud/pom.xml b/samples/client/petstore/spring-cloud/pom.xml
index 254a8357fce7ef52b95a62a4b3b8cb4ce8285b4f..6b400a3539feb5882ff3e5b4981e7ab79278087e 100644
--- a/samples/client/petstore/spring-cloud/pom.xml
+++ b/samples/client/petstore/spring-cloud/pom.xml
@@ -9,12 +9,13 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <swagger-core-version>1.5.18</swagger-core-version>
+        <swagger-core-version>1.6.3</swagger-core-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.5.5</version>
+        <version>2.6.2</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -25,7 +26,7 @@
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-starter-parent</artifactId>
-                <version>2020.0.4</version>
+                <version>2021.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
@@ -33,10 +34,11 @@
     </dependencyManagement>
 
     <dependencies>
+        <!--SpringFox dependencies -->
         <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>${swagger-core-version}</version>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>${springfox.version}</version>
         </dependency>
         <!-- @Nullable annotation -->
         <dependency>
@@ -60,26 +62,20 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.hibernate.validator</groupId>
-            <artifactId>hibernate-validator</artifactId>
-            <version>6.0.16.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>3.0.0</version>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-commons</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java
index 0719fcf872b5c0464aed7240c28a425b68e09362..a9cde131118aa846eb7b889edbb858fedf68f496 100644
--- a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -33,17 +33,23 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
@@ -51,8 +57,8 @@ public interface PetApi {
         consumes = "application/json"
     )
     ResponseEntity<Pet> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet pet);
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet pet
+    );
 
 
     /**
@@ -62,24 +68,29 @@ public interface PetApi {
      * @param apiKey  (optional)
      * @return Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-);
+    ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    );
 
 
     /**
@@ -90,24 +101,31 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = "application/json"
     )
-    ResponseEntity<List<Pet>> 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) List<String> status
-
-);
+    ResponseEntity<List<Pet>> 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) List<String> status
+    );
 
 
     /**
@@ -119,24 +137,31 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = "application/json"
     )
-    ResponseEntity<List<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
-
-);
+    ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
+    );
 
 
     /**
@@ -148,26 +173,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = "application/json"
     )
-    ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-);
+    ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    );
 
 
     /**
@@ -179,21 +207,25 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @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") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
@@ -201,8 +233,8 @@ public interface PetApi {
         consumes = "application/json"
     )
     ResponseEntity<Pet> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet pet);
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet pet
+    );
 
 
     /**
@@ -213,27 +245,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = "application/x-www-form-urlencoded"
     )
-    ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet" ) @RequestParam(value="name", required=false)  String name,
-
-@ApiParam(value = "Updated status of the pet" ) @RequestParam(value="status", required=false)  String status);
+    ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @RequestParam(value="name", required=false) String name,
+        @ApiParam(value = "Updated status of the pet") @RequestParam(value="status", required=false) String status
+    );
 
 
     /**
@@ -244,27 +280,32 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = "application/json",
         consumes = "multipart/form-data"
     )
-    ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server" ) @RequestParam(value="additionalMetadata", required=false)  String additionalMetadata,
-
-@ApiParam(value = "file to upload") @RequestParam("file") MultipartFile file);
+    ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @RequestParam(value="additionalMetadata", required=false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestParam("file") MultipartFile file
+    );
 
 }
diff --git a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java
index 51d842c795c9e77f241522a5738152f960420427..ab7dd8afc556ee436017c1815dd31a0afeb27d07 100644
--- a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -34,20 +34,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{orderId}"
     )
-    ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("orderId") String orderId
-
-);
+    ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("orderId") String orderId
+    );
 
 
     /**
@@ -56,20 +59,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = "application/json"
     )
-    ResponseEntity<Map<String, Integer>> getInventory();
+    ResponseEntity<Map<String, Integer>> getInventory(
+        
+    );
 
 
     /**
@@ -81,23 +92,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{orderId}",
         produces = "application/json"
     )
-    ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("orderId") Long orderId
-
-);
+    ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("orderId") Long orderId
+    );
 
 
     /**
@@ -107,13 +121,17 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
@@ -121,7 +139,7 @@ public interface StoreApi {
         consumes = "application/json"
     )
     ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order order);
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order order
+    );
 
 }
diff --git a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java
index 44d9bbf440e9e827c0f56ae40a092231a2579ecc..e44789929a7252e7cce165ba6fa9de9a0f178418 100644
--- a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -34,22 +34,26 @@ public interface UserApi {
      * @param user Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user.",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user",
         consumes = "application/json"
     )
     ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User user);
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User user
+    );
 
 
     /**
@@ -58,22 +62,26 @@ public interface UserApi {
      * @param user List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = "",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray",
         consumes = "application/json"
     )
     ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> user);
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> user
+    );
 
 
     /**
@@ -82,22 +90,26 @@ public interface UserApi {
      * @param user List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = "",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList",
         consumes = "application/json"
     )
     ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> user);
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> user
+    );
 
 
     /**
@@ -108,23 +120,26 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user.",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-);
+    ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    );
 
 
     /**
@@ -135,23 +150,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = "application/json"
     )
-    ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-);
+    ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    );
 
 
     /**
@@ -162,23 +180,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = "application/json"
     )
-    ResponseEntity<String> 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) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-);
+    ResponseEntity<String> 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) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    );
 
 
     /**
@@ -186,19 +207,25 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = "",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    ResponseEntity<Void> logoutUser();
+    ResponseEntity<Void> logoutUser(
+        
+    );
 
 
     /**
@@ -210,25 +237,27 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user.",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}",
         consumes = "application/json"
     )
-    ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User user);
+    ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User user
+    );
 
 }
diff --git a/samples/client/petstore/spring-stubs/.openapi-generator/VERSION b/samples/client/petstore/spring-stubs/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/spring-stubs/.openapi-generator/VERSION
+++ b/samples/client/petstore/spring-stubs/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/spring-stubs/pom.xml b/samples/client/petstore/spring-stubs/pom.xml
index 2ae7301fc583f606c6632476d4ecf4371a9938ec..ef22a9c572a853568ace89671687e9b5a4a9a72c 100644
--- a/samples/client/petstore/spring-stubs/pom.xml
+++ b/samples/client/petstore/spring-stubs/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -32,16 +32,17 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
@@ -50,12 +51,12 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/PetApi.java
index 551fccda4f31b688873707960a75af4f96cadd99..a893c68961176b2b82b06d75219f803f87abc0c2 100644
--- a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,23 +36,29 @@ public interface PetApi {
      * @param body Pet object that needs to be added to the store (required)
      * @return Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = "application/json"
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -65,24 +71,29 @@ public interface PetApi {
      * @param apiKey  (optional)
      * @return Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -96,25 +107,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = "application/json"
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-) {
+    default ResponseEntity<List<Pet>> 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) List<String> status
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -143,25 +161,32 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = "application/json"
     )
-    default ResponseEntity<List<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
-
-) {
+    default ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -190,26 +215,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = "application/json"
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -237,27 +265,31 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = "application/json"
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -271,27 +303,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = "application/x-www-form-urlencoded"
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -305,28 +341,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = "application/json",
         consumes = "multipart/form-data"
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/StoreApi.java
index 31712e7b2c17b5c4c5b3bff4a73623e0635599b9..1ffe7a38f36ab15f1242b2f7cf8fb2a404e536ff 100644
--- a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,20 +38,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{orderId}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("orderId") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("orderId") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -63,20 +66,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = "application/json"
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -91,23 +102,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{orderId}",
         produces = "application/json"
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("orderId") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("orderId") Long orderId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -134,21 +148,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = "application/json"
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/UserApi.java
index 8b76ca575368e33873d983d51076c22e8a73ad82..2baaed308ede3d447ec48a5aec05be6d10102bf0 100644
--- a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,18 +38,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -61,18 +65,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -84,18 +92,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -109,20 +121,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -136,23 +151,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = "application/json"
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -180,23 +198,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = "application/json"
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -207,16 +228,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,22 +258,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
diff --git a/samples/client/petstore/swift5/alamofireLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/alamofireLibrary/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/alamofireLibrary/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/alamofireLibrary/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/asyncAwaitLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/asyncAwaitLibrary/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/asyncAwaitLibrary/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/asyncAwaitLibrary/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/combineLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/combineLibrary/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/combineLibrary/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/combineLibrary/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/default/.openapi-generator/VERSION b/samples/client/petstore/swift5/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/deprecated/.openapi-generator/VERSION b/samples/client/petstore/swift5/deprecated/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/deprecated/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/deprecated/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/frozenEnums/.openapi-generator/VERSION b/samples/client/petstore/swift5/frozenEnums/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/frozenEnums/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/frozenEnums/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/nonPublicApi/.openapi-generator/VERSION b/samples/client/petstore/swift5/nonPublicApi/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/nonPublicApi/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/nonPublicApi/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/objcCompatible/.openapi-generator/VERSION b/samples/client/petstore/swift5/objcCompatible/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/objcCompatible/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/objcCompatible/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/oneOf/.openapi-generator/VERSION b/samples/client/petstore/swift5/oneOf/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/oneOf/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/oneOf/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/promisekitLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/promisekitLibrary/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/promisekitLibrary/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/promisekitLibrary/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION b/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/resultLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/resultLibrary/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/resultLibrary/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/resultLibrary/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/vaporLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/vaporLibrary/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/vaporLibrary/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/vaporLibrary/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator/VERSION b/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator/VERSION
+++ b/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v11-oneOf/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v11-oneOf/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v11-oneOf/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v11-oneOf/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v12-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v12-provided-in-root/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v12-provided-in-root/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v12-provided-in-root/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v12-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v12-provided-in-root/builds/with-npm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v12-provided-in-root/builds/with-npm/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v12-provided-in-root/builds/with-npm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v13-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v13-provided-in-root/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v13-provided-in-root/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v13-provided-in-root/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v13-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v13-provided-in-root/builds/with-npm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v13-provided-in-root/builds/with-npm/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v13-provided-in-root/builds/with-npm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-aurelia/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-aurelia/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-aurelia/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-aurelia/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-axios/builds/composed-schemas/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/composed-schemas/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-axios/builds/composed-schemas/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-axios/builds/composed-schemas/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-axios/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-axios/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-axios/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-axios/builds/es6-target/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/es6-target/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-axios/builds/es6-target/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-axios/builds/es6-target/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-axios/builds/test-petstore/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/test-petstore/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-axios/builds/test-petstore/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-axios/builds/test-petstore/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-axios/builds/with-complex-headers/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-complex-headers/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-axios/builds/with-complex-headers/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-axios/builds/with-complex-headers/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-axios/builds/with-interfaces/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-interfaces/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-axios/builds/with-interfaces/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-axios/builds/with-interfaces/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-axios/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-npm-version/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-axios/builds/with-npm-version/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-axios/builds/with-npm-version/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/default-v3.0/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-fetch/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-fetch/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-fetch/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-fetch/builds/enum/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/enum/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-fetch/builds/enum/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-fetch/builds/enum/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-fetch/builds/es6-target/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/es6-target/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-fetch/builds/es6-target/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-fetch/builds/es6-target/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-fetch/builds/multiple-parameters/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/multiple-parameters/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-fetch/builds/multiple-parameters/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-fetch/builds/multiple-parameters/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-fetch/builds/sagas-and-records/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/sagas-and-records/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-fetch/builds/sagas-and-records/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-fetch/builds/sagas-and-records/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-fetch/builds/typescript-three-plus/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/typescript-three-plus/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-fetch/builds/typescript-three-plus/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-fetch/builds/typescript-three-plus/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-fetch/builds/with-interfaces/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/with-interfaces/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-fetch/builds/with-interfaces/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-fetch/builds/with-interfaces/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-fetch/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/with-npm-version/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-fetch/builds/with-npm-version/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-fetch/builds/with-npm-version/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-fetch/builds/without-runtime-checks/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/without-runtime-checks/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-fetch/builds/without-runtime-checks/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-fetch/builds/without-runtime-checks/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-inversify/.openapi-generator/VERSION b/samples/client/petstore/typescript-inversify/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-inversify/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-inversify/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-jquery/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-jquery/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-jquery/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-jquery/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-jquery/npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-jquery/npm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-jquery/npm/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-jquery/npm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-nestjs-v6-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-nestjs-v6-provided-in-root/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-nestjs-v6-provided-in-root/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-nestjs-v6-provided-in-root/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-node/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-node/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-node/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-node/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-node/npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-node/npm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-node/npm/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-node/npm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-redux-query/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-redux-query/builds/with-npm-version/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-redux-query/builds/with-npm-version/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-redux-query/builds/with-npm-version/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/typescript-rxjs/builds/with-progress-subscriber/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/with-progress-subscriber/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/client/petstore/typescript-rxjs/builds/with-progress-subscriber/.openapi-generator/VERSION
+++ b/samples/client/petstore/typescript-rxjs/builds/with-progress-subscriber/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/config/petstore/protobuf-schema/.openapi-generator/VERSION b/samples/config/petstore/protobuf-schema/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/config/petstore/protobuf-schema/.openapi-generator/VERSION
+++ b/samples/config/petstore/protobuf-schema/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/elm/.openapi-generator/VERSION b/samples/openapi3/client/elm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/elm/.openapi-generator/VERSION
+++ b/samples/openapi3/client/elm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/.openapi-generator/VERSION b/samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/.openapi-generator/VERSION
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/.openapi-generator/VERSION b/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/.openapi-generator/VERSION
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/python/.openapi-generator/VERSION b/samples/openapi3/client/extensions/x-auth-id-alias/python/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/python/.openapi-generator/VERSION
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/python/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/.openapi-generator/VERSION b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/.openapi-generator/VERSION
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb
index b0324ac0bf926261068cdff726a2895433f01c25..2b3dbe10fe7d4781eb62e19768ee2c8678bf66b3 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api/usage_api.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api/usage_api.rb
index fa2549ca25f12cc997b6a27874f1a16be7384bab..3ca038ad1133f04d19e73b22db6ed449096ec246 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api/usage_api.rb
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api/usage_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_client.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_client.rb
index acd170f6b6e975daf8a13306c2287283a40fffa7..abc3d3c2674f93e60d2bf3bde147e3361cb31d44 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_client.rb
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_client.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_error.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_error.rb
index 1d9d6b85c51a7960ad675a97300574ed8138058b..7b029fc31b73e449565526377035356e2270ddae 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_error.rb
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_error.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/configuration.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/configuration.rb
index 2c2d6ed5e187edad96feeef298651e594d5ccdb6..03a6b4505c3be00eb5e8dbc0ba3893bd32e9163e 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/configuration.rb
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/configuration.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb
index 92236c87116d0fe8056d9f915d09a773d7472042..0af9e59105aabd831f5bc17ce848ef1a8797b809 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/api_client_spec.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/api_client_spec.rb
index d4b35523b206a039509dc77d55ca7df8c4b2a9d1..24fc7dbeb5fe201af4c561b0d5484b4b6f038385 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/api_client_spec.rb
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/api_client_spec.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/configuration_spec.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/configuration_spec.rb
index 39ae825216501cf4700310c58baf3ac8064b7da5..9ed65352f5b1bfc0fc8cfe75831cfa1ecf4700f9 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/configuration_spec.rb
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/configuration_spec.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb
index 0a68b8922b001e5f171875ca329a2b51bc76f138..cd0ab1c5441d63ece58cc3dfdc603edf14b901f2 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec
index 29085fa88f1ae2ef6d9ff448255b3bbe603131bd..7405c95a614b63b392eeffc56fbec53dd0e500c2 100644
--- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec
+++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec
@@ -8,7 +8,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/dynamic-servers/python/.openapi-generator/VERSION b/samples/openapi3/client/features/dynamic-servers/python/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/features/dynamic-servers/python/.openapi-generator/VERSION
+++ b/samples/openapi3/client/features/dynamic-servers/python/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/.openapi-generator/VERSION b/samples/openapi3/client/features/dynamic-servers/ruby/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/features/dynamic-servers/ruby/.openapi-generator/VERSION
+++ b/samples/openapi3/client/features/dynamic-servers/ruby/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/dynamic_servers.gemspec b/samples/openapi3/client/features/dynamic-servers/ruby/dynamic_servers.gemspec
index c5fb037a7f6e5cdf0e92c39f2144bbbd16ed0e24..386e9241fe102024790ac8b0b6c4eca3220e4ee5 100644
--- a/samples/openapi3/client/features/dynamic-servers/ruby/dynamic_servers.gemspec
+++ b/samples/openapi3/client/features/dynamic-servers/ruby/dynamic_servers.gemspec
@@ -8,7 +8,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers.rb
index a70acea01140c065443bc38a8f1f14fa116cd195..6e40dcf063f8156efc360f2f9c2bc983f7baef0b 100644
--- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers.rb
+++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb
index d4efa7f35130867ee43ca391c7306d2da57347fb..daba92a4fa573a57221376d06009196dc649fc6d 100644
--- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb
+++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb
index fc7597e64fe9dea9676c5bd6d456d800c71c41e3..60e56673b9973a32f605cc762a82aa55f768bcb6 100644
--- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb
+++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_error.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_error.rb
index 9d73ce3ffaad87f565dc4801d6b6394c10b13e3c..17ff6f501b1854f62f2a897dd2ad5a8d0a4ba9a5 100644
--- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_error.rb
+++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_error.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/configuration.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/configuration.rb
index f5b389637ff1e12568b6ecc35274a57053e69e4e..533f65efb56a8470cf784da1f6fe5659bcc069db 100644
--- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/configuration.rb
+++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/configuration.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/version.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/version.rb
index 1e07b74b1fdfe3cb9b7e103b205555d36a6ab12f..fdae30f5c10350079d4f0deba60e0d0b43dbc75e 100644
--- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/version.rb
+++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/version.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/spec/api_client_spec.rb b/samples/openapi3/client/features/dynamic-servers/ruby/spec/api_client_spec.rb
index 8bc1b5c8867bd85dae54b230015856d7ab4bcb61..11c36c4a292383c0eef95cf2082b1ab57f1354c8 100644
--- a/samples/openapi3/client/features/dynamic-servers/ruby/spec/api_client_spec.rb
+++ b/samples/openapi3/client/features/dynamic-servers/ruby/spec/api_client_spec.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/spec/configuration_spec.rb b/samples/openapi3/client/features/dynamic-servers/ruby/spec/configuration_spec.rb
index 84a6ac09401cb0d91011d318a7f605e0adcdf7e5..7e20d8a8e045e9e3eaeb659dc3804fc2852914a1 100644
--- a/samples/openapi3/client/features/dynamic-servers/ruby/spec/configuration_spec.rb
+++ b/samples/openapi3/client/features/dynamic-servers/ruby/spec/configuration_spec.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/spec/spec_helper.rb b/samples/openapi3/client/features/dynamic-servers/ruby/spec/spec_helper.rb
index f16601469053df4d5180c2c3f932b559dc7e378a..c408531cca12e589d6bcba330550582c8f2165d3 100644
--- a/samples/openapi3/client/features/dynamic-servers/ruby/spec/spec_helper.rb
+++ b/samples/openapi3/client/features/dynamic-servers/ruby/spec/spec_helper.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/.openapi-generator/VERSION b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/.openapi-generator/VERSION
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore.rb
index ac8f867d98d00a45619cc0b52736b3d13b319a60..dfeb3986439eab7983ce27f9e11bfa6b6399d3cc 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore.rb
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api/usage_api.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api/usage_api.rb
index f5a2172c5758496857a9bae37b814d0648ad2698..6b74413ec0f8e3f2292ef17120e2f65fdf9419a8 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api/usage_api.rb
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api/usage_api.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb
index c09f3588044e4488f6696cd29bb42ffaeb3e1c69..650088fca01cb3ebf330a57e3d975a86555be1f9 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_error.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_error.rb
index 110ca5de7bfc55ff6f0ce3bfe364d8a297d5cbbe..7464a5ae6ca1870001fec91a56b6f171939ef967 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_error.rb
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_error.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/configuration.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/configuration.rb
index 69251a11d237dd1012af23bb507c5c2cdb0d351b..9a122b5a22b4002e8b184066b77f176405630980 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/configuration.rb
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/configuration.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/array_alias.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/array_alias.rb
index 2550c985ef78bffeced9a71399d8ecb67a11ff32..ba89078942eb70dcb34147470ae5d30718be24a8 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/array_alias.rb
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/array_alias.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/map_alias.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/map_alias.rb
index 45f5b3532a7d46623d6b2b8bf06a6ad07b1a1a7b..26dd99dc1aa0f091fb9541d93a665034e736b200 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/map_alias.rb
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/map_alias.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/version.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/version.rb
index c803b873a033e6d40d1e65fdfd56c0a93d2f0700..b2685e70c63cf0a6e5d3b764172f159a39c48fea 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/version.rb
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/version.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/petstore.gemspec b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/petstore.gemspec
index 09ab2855fb4ca3cbe20b5c31306085638ddc9463..44f179dbf3c5aa359429be215ad4cfafd083008a 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/petstore.gemspec
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/petstore.gemspec
@@ -8,7 +8,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/api_client_spec.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/api_client_spec.rb
index 45a8bfe213fa51a48e94f3800050639d0bb7e2f7..e8c82e7bcc2b3f30ae038da07b26411043ab9039 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/api_client_spec.rb
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/api_client_spec.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/configuration_spec.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/configuration_spec.rb
index dcc206c5189e7b5a6f4179b7a37b2d5260d0e4fd..97934083eeb1811f05f2d0e1900c465f110e05ba 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/configuration_spec.rb
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/configuration_spec.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/spec_helper.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/spec_helper.rb
index 64a0a2bc8b0e4d1d1105d68b67a47a9d4878b95a..5face65cf285a550ac958b2e19abf750ccadedde 100644
--- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/spec_helper.rb
+++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/spec_helper.rb
@@ -6,7 +6,7 @@
 The version of the OpenAPI document: 1.0.0
 
 Generated by: https://openapi-generator.tech
-OpenAPI Generator version: 5.3.1
+OpenAPI Generator version: 5.4.0-SNAPSHOT
 
 =end
 
diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/go/go-petstore/.openapi-generator/VERSION b/samples/openapi3/client/petstore/go/go-petstore/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/go/go-petstore/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/go/go-petstore/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/.openapi-generator/VERSION b/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/java/jersey2-java8/.openapi-generator/VERSION b/samples/openapi3/client/petstore/java/jersey2-java8/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/java/jersey2-java8/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/java/jersey2-java8/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/python-legacy/.openapi-generator/VERSION b/samples/openapi3/client/petstore/python-legacy/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100755
--- a/samples/openapi3/client/petstore/python-legacy/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/python-legacy/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/python/.openapi-generator/VERSION b/samples/openapi3/client/petstore/python/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/python/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/python/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/.openapi-generator-ignore b/samples/openapi3/client/petstore/spring-cloud-async/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/.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/openapi3/client/petstore/spring-cloud-async/.openapi-generator/FILES b/samples/openapi3/client/petstore/spring-cloud-async/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..3510d2b2d2760f8b8df17c0b2292ece84393be1a
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/.openapi-generator/FILES
@@ -0,0 +1,16 @@
+README.md
+pom.xml
+src/main/java/org/openapitools/api/PetApi.java
+src/main/java/org/openapitools/api/PetApiClient.java
+src/main/java/org/openapitools/api/StoreApi.java
+src/main/java/org/openapitools/api/StoreApiClient.java
+src/main/java/org/openapitools/api/UserApi.java
+src/main/java/org/openapitools/api/UserApiClient.java
+src/main/java/org/openapitools/configuration/ApiKeyRequestInterceptor.java
+src/main/java/org/openapitools/configuration/ClientConfiguration.java
+src/main/java/org/openapitools/model/Category.java
+src/main/java/org/openapitools/model/ModelApiResponse.java
+src/main/java/org/openapitools/model/Order.java
+src/main/java/org/openapitools/model/Pet.java
+src/main/java/org/openapitools/model/Tag.java
+src/main/java/org/openapitools/model/User.java
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/.openapi-generator/VERSION b/samples/openapi3/client/petstore/spring-cloud-async/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..0984c4c1ad213d3a352049ad557efc9bd5140752
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/README.md b/samples/openapi3/client/petstore/spring-cloud-async/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..db2e65302794089442d20a5c94701100148b79a0
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/README.md
@@ -0,0 +1,53 @@
+# petstore-spring-cloud
+
+## Requirements
+
+Building the API client library requires [Maven](https://maven.apache.org/) to be installed.
+
+## Installation
+
+To install the API client library to your local Maven repository, simply execute:
+
+```shell
+mvn install
+```
+
+To deploy it to a remote Maven repository instead, configure the settings of the repository and execute:
+
+```shell
+mvn deploy
+```
+
+Refer to the [official documentation](https://maven.apache.org/plugins/maven-deploy-plugin/usage.html) for more information.
+
+### Maven users
+
+Add this dependency to your project's POM:
+
+```xml
+<dependency>
+    <groupId>org.openapitools.openapi3</groupId>
+    <artifactId>petstore-spring-cloud</artifactId>
+    <version>1.0.0</version>
+    <scope>compile</scope>
+</dependency>
+```
+
+### Gradle users
+
+Add this dependency to your project's build file:
+
+```groovy
+compile "org.openapitools.openapi3:petstore-spring-cloud:1.0.0"
+```
+
+### Others
+
+At first generate the JAR by executing:
+
+mvn package
+
+Then manually install the following JARs:
+
+* target/petstore-spring-cloud-1.0.0.jar
+* target/lib/*.jar
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/pom.xml b/samples/openapi3/client/petstore/spring-cloud-async/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..950b9bbe3531b329de58560a4f299bbd34ebca5d
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/pom.xml
@@ -0,0 +1,79 @@
+<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.openapi3</groupId>
+    <artifactId>petstore-spring-cloud</artifactId>
+    <packaging>jar</packaging>
+    <name>petstore-spring-cloud</name>
+    <version>1.0.0</version>
+    <properties>
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>2.1.11</swagger-core-version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.6.2</version>
+    </parent>
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+    </build>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-starter-parent</artifactId>
+                <version>2021.0.0</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>${swagger-core-version}</version>
+        </dependency>
+        <!-- @Nullable annotation -->
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-oauth2</artifactId>
+            <version>2.2.5.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>0.2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..88803c5bac2ab5135b2c6e46bac836a9bbcb897b
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java
@@ -0,0 +1,270 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.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.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "Pet", description = "the Pet API")
+public interface PetApi {
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Add a new pet to the store",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet",
+        consumes = "application/json"
+    )
+    CompletableFuture<ResponseEntity<Void>> addPet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    );
+
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @param apiKey  (optional)
+     * @return Invalid pet value (status code 400)
+     */
+    @Operation(
+        summary = "Deletes a pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid pet value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/pet/{petId}"
+    )
+    CompletableFuture<ResponseEntity<Void>> deletePet(
+        @Parameter(name = "petId", description = "Pet id to delete", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "api_key", description = "", schema = @Schema(description = "")) @RequestHeader(value = "api_key", required = false) String apiKey
+    );
+
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     */
+    @Operation(
+        summary = "Finds Pets by status",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid status value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByStatus",
+        produces = "application/json"
+    )
+    CompletableFuture<ResponseEntity<List<Pet>>> findPetsByStatus(
+        @NotNull @Parameter(name = "status", description = "Status values that need to be considered for filter", required = true, schema = @Schema(description = "", allowableValues = { "available", "pending", "sold" })) @Valid @RequestParam(value = "status", required = true) List<String> status
+    );
+
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     */
+    @Operation(
+        summary = "Finds Pets by tags",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid tag value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByTags",
+        produces = "application/json"
+    )
+    CompletableFuture<ResponseEntity<List<Pet>>> findPetsByTags(
+        @NotNull @Parameter(name = "tags", description = "Tags to filter by", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "tags", required = true) List<String> tags
+    );
+
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     */
+    @Operation(
+        summary = "Find pet by ID",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/{petId}",
+        produces = "application/json"
+    )
+    CompletableFuture<ResponseEntity<Pet>> getPetById(
+        @Parameter(name = "petId", description = "ID of pet to return", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId
+    );
+
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     */
+    @Operation(
+        summary = "Update an existing pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found"),
+            @ApiResponse(responseCode = "405", description = "Validation exception")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/pet",
+        consumes = "application/json"
+    )
+    CompletableFuture<ResponseEntity<Void>> updatePet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    );
+
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Updates a pet in the store with form data",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}",
+        consumes = "application/x-www-form-urlencoded"
+    )
+    CompletableFuture<ResponseEntity<Void>> updatePetWithForm(
+        @Parameter(name = "petId", description = "ID of pet that needs to be updated", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "name", description = "Updated name of the pet", schema = @Schema(description = "")) @RequestParam(value="name", required=false) String name,
+        @Parameter(name = "status", description = "Updated status of the pet", schema = @Schema(description = "")) @RequestParam(value="status", required=false) String status
+    );
+
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}/uploadImage",
+        produces = "application/json",
+        consumes = "multipart/form-data"
+    )
+    CompletableFuture<ResponseEntity<ModelApiResponse>> uploadFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @RequestParam(value="additionalMetadata", required=false) String additionalMetadata,
+        @Parameter(name = "file", description = "file to upload", schema = @Schema(description = "")) @RequestParam("file") MultipartFile file
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApiClient.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApiClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..f80fe4ddc678757fd8cc24d896cb7fbe353b3993
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApiClient.java
@@ -0,0 +1,8 @@
+package org.openapitools.api;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.openapitools.configuration.ClientConfiguration;
+
+@FeignClient(name="${pet.name:pet}", url="${pet.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
+public interface PetApiClient extends PetApi {
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..da999d740a5a575fd827919dbd60331284bcef4a
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java
@@ -0,0 +1,140 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.Map;
+import org.openapitools.model.Order;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "Store", description = "the Store API")
+public interface StoreApi {
+
+    /**
+     * DELETE /store/order/{orderId} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/store/order/{orderId}"
+    )
+    CompletableFuture<ResponseEntity<Void>> deleteOrder(
+        @Parameter(name = "orderId", description = "ID of the order that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("orderId") String orderId
+    );
+
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Returns pet inventories by status",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Map.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/inventory",
+        produces = "application/json"
+    )
+    CompletableFuture<ResponseEntity<Map<String, Integer>>> getInventory(
+        
+    );
+
+
+    /**
+     * GET /store/order/{orderId} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Find purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/order/{orderId}",
+        produces = "application/json"
+    )
+    CompletableFuture<ResponseEntity<Order>> getOrderById(
+        @Min(1L) @Max(5L) @Parameter(name = "orderId", description = "ID of pet that needs to be fetched", required = true, schema = @Schema(description = "")) @PathVariable("orderId") Long orderId
+    );
+
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param body order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     */
+    @Operation(
+        summary = "Place an order for a pet",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid Order")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/store/order",
+        produces = "application/json"
+    )
+    CompletableFuture<ResponseEntity<Order>> placeOrder(
+        @Parameter(name = "body", description = "order placed for purchasing the pet", required = true, schema = @Schema(description = "")) @Valid @RequestBody Order body
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApiClient.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApiClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..71d613a871dd95d6652d7c807425bf45f06334e7
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApiClient.java
@@ -0,0 +1,8 @@
+package org.openapitools.api;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.openapitools.configuration.ClientConfiguration;
+
+@FeignClient(name="${store.name:store}", url="${store.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
+public interface StoreApiClient extends StoreApi {
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..225627cbacc097c25aed0d1350f16e00ac14165d
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java
@@ -0,0 +1,231 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.List;
+import java.time.OffsetDateTime;
+import org.openapitools.model.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "User", description = "the User API")
+public interface UserApi {
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param body Created user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Create user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user"
+    )
+    CompletableFuture<ResponseEntity<Void>> createUser(
+        @Parameter(name = "body", description = "Created user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    );
+
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithArray"
+    )
+    CompletableFuture<ResponseEntity<Void>> createUsersWithArrayInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    );
+
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithList"
+    )
+    CompletableFuture<ResponseEntity<Void>> createUsersWithListInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    );
+
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/user/{username}"
+    )
+    CompletableFuture<ResponseEntity<Void>> deleteUser(
+        @Parameter(name = "username", description = "The name that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    );
+
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Get user by user name",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  User.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/{username}",
+        produces = "application/json"
+    )
+    CompletableFuture<ResponseEntity<User>> getUserByName(
+        @Parameter(name = "username", description = "The name that needs to be fetched. Use user1 for testing.", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    );
+
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     */
+    @Operation(
+        summary = "Logs user into the system",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username/password supplied")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/login",
+        produces = "application/json"
+    )
+    CompletableFuture<ResponseEntity<String>> loginUser(
+        @NotNull @Parameter(name = "username", description = "The user name for login", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @Parameter(name = "password", description = "The password for login in clear text", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "password", required = true) String password
+    );
+
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Logs out current logged in user session",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/logout"
+    )
+    CompletableFuture<ResponseEntity<Void>> logoutUser(
+        
+    );
+
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param body Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Updated user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid user supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/user/{username}"
+    )
+    CompletableFuture<ResponseEntity<Void>> updateUser(
+        @Parameter(name = "username", description = "name that need to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(name = "body", description = "Updated user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApiClient.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApiClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..1db4598108db8bd42a6d52a426c79028ce6df837
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApiClient.java
@@ -0,0 +1,8 @@
+package org.openapitools.api;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.openapitools.configuration.ClientConfiguration;
+
+@FeignClient(name="${user.name:user}", url="${user.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
+public interface UserApiClient extends UserApi {
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/configuration/ApiKeyRequestInterceptor.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/configuration/ApiKeyRequestInterceptor.java
new file mode 100644
index 0000000000000000000000000000000000000000..199278dcb539c3e9160008394b6d949afe48669c
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/configuration/ApiKeyRequestInterceptor.java
@@ -0,0 +1,31 @@
+package org.openapitools.configuration;
+
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import feign.Util;
+
+
+public class ApiKeyRequestInterceptor implements RequestInterceptor {
+  private final String location;
+  private final String name;
+  private String value;
+
+  public ApiKeyRequestInterceptor(String location, String name, String value) {
+    Util.checkNotNull(location, "location", new Object[0]);
+    Util.checkNotNull(name, "name", new Object[0]);
+    Util.checkNotNull(value, "value", new Object[0]);
+    this.location = location;
+    this.name = name;
+    this.value = value;
+  }
+
+  @Override
+  public void apply(RequestTemplate requestTemplate) {
+    if(location.equals("header")) {
+      requestTemplate.header(name, value);
+    } else if(location.equals("query")) {
+      requestTemplate.query(name, value);
+    }
+  }
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/configuration/ClientConfiguration.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/configuration/ClientConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a28661290d98a102e7aab66748b7b4d0e306e60
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/configuration/ClientConfiguration.java
@@ -0,0 +1,48 @@
+package org.openapitools.configuration;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.cloud.openfeign.security.OAuth2FeignRequestInterceptor;
+import org.springframework.security.oauth2.client.DefaultOAuth2ClientContext;
+import org.springframework.security.oauth2.client.OAuth2ClientContext;
+import org.springframework.security.oauth2.client.token.grant.implicit.ImplicitResourceDetails;
+
+@Configuration
+@EnableConfigurationProperties
+public class ClientConfiguration {
+
+  @Value("${openapipetstore.security.apiKey.key:}")
+  private String apiKeyKey;
+
+  @Bean
+  @ConditionalOnProperty(name = "openapipetstore.security.apiKey.key")
+  public ApiKeyRequestInterceptor apiKeyRequestInterceptor() {
+    return new ApiKeyRequestInterceptor("header", "api_key", this.apiKeyKey);
+  }
+
+  @Bean
+  @ConditionalOnProperty("openapipetstore.security.petstoreAuth.client-id")
+  public OAuth2FeignRequestInterceptor petstoreAuthRequestInterceptor(OAuth2ClientContext oAuth2ClientContext) {
+    return new OAuth2FeignRequestInterceptor(oAuth2ClientContext, petstoreAuthResourceDetails());
+  }
+
+  @Bean
+  @ConditionalOnProperty("openapipetstore.security.petstoreAuth.client-id")
+  public OAuth2ClientContext oAuth2ClientContext() {
+    return new DefaultOAuth2ClientContext();
+  }
+
+  @Bean
+  @ConditionalOnProperty("openapipetstore.security.petstoreAuth.client-id")
+  @ConfigurationProperties("openapipetstore.security.petstoreAuth")
+  public ImplicitResourceDetails petstoreAuthResourceDetails() {
+    ImplicitResourceDetails details = new ImplicitResourceDetails();
+    details.setUserAuthorizationUri("http://petstore.swagger.io/api/oauth/dialog");
+    return details;
+  }
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/Category.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/Category.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb69c674a1e4eb26f08848913d1bb4e0675bd1b2
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/Category.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A category for a pet
+ */
+@Schema(name = "Category",description = "A category for a pet")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Category   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Category id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Category name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Category category = (Category) o;
+    return Objects.equals(this.id, category.id) &&
+        Objects.equals(this.name, category.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Category {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/ModelApiResponse.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/ModelApiResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..0ef610e38f015da0ce3e71fa99fde283c1d59cb6
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/ModelApiResponse.java
@@ -0,0 +1,134 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Describes the result of uploading an image resource
+ */
+@Schema(name = "ApiResponse",description = "Describes the result of uploading an image resource")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelApiResponse   {
+  @JsonProperty("code")
+  private Integer code;
+
+  @JsonProperty("type")
+  private String type;
+
+  @JsonProperty("message")
+  private String message;
+
+  public ModelApiResponse code(Integer code) {
+    this.code = code;
+    return this;
+  }
+
+  /**
+   * Get code
+   * @return code
+  */
+  @Schema(name = "code", defaultValue = "")
+
+
+  public Integer getCode() {
+    return code;
+  }
+
+  public void setCode(Integer code) {
+    this.code = code;
+  }
+
+  public ModelApiResponse type(String type) {
+    this.type = type;
+    return this;
+  }
+
+  /**
+   * Get type
+   * @return type
+  */
+  @Schema(name = "type", defaultValue = "")
+
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public ModelApiResponse message(String message) {
+    this.message = message;
+    return this;
+  }
+
+  /**
+   * Get message
+   * @return message
+  */
+  @Schema(name = "message", defaultValue = "")
+
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelApiResponse _apiResponse = (ModelApiResponse) o;
+    return Objects.equals(this.code, _apiResponse.code) &&
+        Objects.equals(this.type, _apiResponse.type) &&
+        Objects.equals(this.message, _apiResponse.message);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(code, type, message);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelApiResponse {\n");
+    
+    sb.append("    code: ").append(toIndentedString(code)).append("\n");
+    sb.append("    type: ").append(toIndentedString(type)).append("\n");
+    sb.append("    message: ").append(toIndentedString(message)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/Order.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/Order.java
new file mode 100644
index 0000000000000000000000000000000000000000..528598b79ea73023103fc45511908a8c65602454
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/Order.java
@@ -0,0 +1,250 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.time.OffsetDateTime;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * An order for a pets from the pet store
+ */
+@Schema(name = "Order",description = "An order for a pets from the pet store")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Order   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("petId")
+  private Long petId;
+
+  @JsonProperty("quantity")
+  private Integer quantity;
+
+  @JsonProperty("shipDate")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime shipDate;
+
+  /**
+   * Order Status
+   */
+  public enum StatusEnum {
+    PLACED("placed"),
+    
+    APPROVED("approved"),
+    
+    DELIVERED("delivered");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  @JsonProperty("complete")
+  private Boolean complete = false;
+
+  public Order id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Order petId(Long petId) {
+    this.petId = petId;
+    return this;
+  }
+
+  /**
+   * Get petId
+   * @return petId
+  */
+  @Schema(name = "petId", defaultValue = "")
+
+
+  public Long getPetId() {
+    return petId;
+  }
+
+  public void setPetId(Long petId) {
+    this.petId = petId;
+  }
+
+  public Order quantity(Integer quantity) {
+    this.quantity = quantity;
+    return this;
+  }
+
+  /**
+   * Get quantity
+   * @return quantity
+  */
+  @Schema(name = "quantity", defaultValue = "")
+
+
+  public Integer getQuantity() {
+    return quantity;
+  }
+
+  public void setQuantity(Integer quantity) {
+    this.quantity = quantity;
+  }
+
+  public Order shipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+    return this;
+  }
+
+  /**
+   * Get shipDate
+   * @return shipDate
+  */
+  @Schema(name = "shipDate", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getShipDate() {
+    return shipDate;
+  }
+
+  public void setShipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+  }
+
+  public Order status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Order Status
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "Order Status")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+  public Order complete(Boolean complete) {
+    this.complete = complete;
+    return this;
+  }
+
+  /**
+   * Get complete
+   * @return complete
+  */
+  @Schema(name = "complete", defaultValue = "")
+
+
+  public Boolean getComplete() {
+    return complete;
+  }
+
+  public void setComplete(Boolean complete) {
+    this.complete = complete;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Order order = (Order) o;
+    return Objects.equals(this.id, order.id) &&
+        Objects.equals(this.petId, order.petId) &&
+        Objects.equals(this.quantity, order.quantity) &&
+        Objects.equals(this.shipDate, order.shipDate) &&
+        Objects.equals(this.status, order.status) &&
+        Objects.equals(this.complete, order.complete);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, petId, quantity, shipDate, status, complete);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Order {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    petId: ").append(toIndentedString(petId)).append("\n");
+    sb.append("    quantity: ").append(toIndentedString(quantity)).append("\n");
+    sb.append("    shipDate: ").append(toIndentedString(shipDate)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    complete: ").append(toIndentedString(complete)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/Pet.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/Pet.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c2986fea846e0386388ff797d8c60905ef99aa3
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/Pet.java
@@ -0,0 +1,270 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.model.Category;
+import org.openapitools.model.Tag;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A pet for sale in the pet store
+ */
+@Schema(name = "Pet",description = "A pet for sale in the pet store")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Pet   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("category")
+  private Category category;
+
+  @JsonProperty("name")
+  private String name;
+
+  @JsonProperty("photoUrls")
+  @Valid
+  private List<String> photoUrls = new ArrayList<>();
+
+  @JsonProperty("tags")
+  @Valid
+  private List<Tag> tags = null;
+
+  /**
+   * pet status in the store
+   */
+  public enum StatusEnum {
+    AVAILABLE("available"),
+    
+    PENDING("pending"),
+    
+    SOLD("sold");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  public Pet id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Pet category(Category category) {
+    this.category = category;
+    return this;
+  }
+
+  /**
+   * Get category
+   * @return category
+  */
+  @Schema(name = "category", defaultValue = "")
+
+  @Valid
+
+  public Category getCategory() {
+    return category;
+  }
+
+  public void setCategory(Category category) {
+    this.category = category;
+  }
+
+  public Pet name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", example = "doggie", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public Pet photoUrls(List<String> photoUrls) {
+    this.photoUrls = photoUrls;
+    return this;
+  }
+
+  public Pet addPhotoUrlsItem(String photoUrlsItem) {
+    this.photoUrls.add(photoUrlsItem);
+    return this;
+  }
+
+  /**
+   * Get photoUrls
+   * @return photoUrls
+  */
+  @Schema(name = "photoUrls", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<String> getPhotoUrls() {
+    return photoUrls;
+  }
+
+  public void setPhotoUrls(List<String> photoUrls) {
+    this.photoUrls = photoUrls;
+  }
+
+  public Pet tags(List<Tag> tags) {
+    this.tags = tags;
+    return this;
+  }
+
+  public Pet addTagsItem(Tag tagsItem) {
+    if (this.tags == null) {
+      this.tags = new ArrayList<>();
+    }
+    this.tags.add(tagsItem);
+    return this;
+  }
+
+  /**
+   * Get tags
+   * @return tags
+  */
+  @Schema(name = "tags", defaultValue = "")
+
+  @Valid
+
+  public List<Tag> getTags() {
+    return tags;
+  }
+
+  public void setTags(List<Tag> tags) {
+    this.tags = tags;
+  }
+
+  public Pet status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * pet status in the store
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "pet status in the store")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Pet pet = (Pet) o;
+    return Objects.equals(this.id, pet.id) &&
+        Objects.equals(this.category, pet.category) &&
+        Objects.equals(this.name, pet.name) &&
+        Objects.equals(this.photoUrls, pet.photoUrls) &&
+        Objects.equals(this.tags, pet.tags) &&
+        Objects.equals(this.status, pet.status);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, category, name, photoUrls, tags, status);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Pet {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    category: ").append(toIndentedString(category)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    photoUrls: ").append(toIndentedString(photoUrls)).append("\n");
+    sb.append("    tags: ").append(toIndentedString(tags)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/Tag.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/Tag.java
new file mode 100644
index 0000000000000000000000000000000000000000..27166f687a27bb2f4a97d9ffdc486b35a263bd2e
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/Tag.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A tag for a pet
+ */
+@Schema(name = "Tag",description = "A tag for a pet")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Tag   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Tag id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Tag name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Tag tag = (Tag) o;
+    return Objects.equals(this.id, tag.id) &&
+        Objects.equals(this.name, tag.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Tag {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/User.java b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba24f681c1df96bffda12b6d91738e52801d6077
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-async/src/main/java/org/openapitools/model/User.java
@@ -0,0 +1,259 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A User who is purchasing from the pet store
+ */
+@Schema(name = "User",description = "A User who is purchasing from the pet store")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class User   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("username")
+  private String username;
+
+  @JsonProperty("firstName")
+  private String firstName;
+
+  @JsonProperty("lastName")
+  private String lastName;
+
+  @JsonProperty("email")
+  private String email;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("phone")
+  private String phone;
+
+  @JsonProperty("userStatus")
+  private Integer userStatus;
+
+  public User id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public User username(String username) {
+    this.username = username;
+    return this;
+  }
+
+  /**
+   * Get username
+   * @return username
+  */
+  @Schema(name = "username", defaultValue = "")
+
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public User firstName(String firstName) {
+    this.firstName = firstName;
+    return this;
+  }
+
+  /**
+   * Get firstName
+   * @return firstName
+  */
+  @Schema(name = "firstName", defaultValue = "")
+
+
+  public String getFirstName() {
+    return firstName;
+  }
+
+  public void setFirstName(String firstName) {
+    this.firstName = firstName;
+  }
+
+  public User lastName(String lastName) {
+    this.lastName = lastName;
+    return this;
+  }
+
+  /**
+   * Get lastName
+   * @return lastName
+  */
+  @Schema(name = "lastName", defaultValue = "")
+
+
+  public String getLastName() {
+    return lastName;
+  }
+
+  public void setLastName(String lastName) {
+    this.lastName = lastName;
+  }
+
+  public User email(String email) {
+    this.email = email;
+    return this;
+  }
+
+  /**
+   * Get email
+   * @return email
+  */
+  @Schema(name = "email", defaultValue = "")
+
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+  public User password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", defaultValue = "")
+
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public User phone(String phone) {
+    this.phone = phone;
+    return this;
+  }
+
+  /**
+   * Get phone
+   * @return phone
+  */
+  @Schema(name = "phone", defaultValue = "")
+
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public User userStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+    return this;
+  }
+
+  /**
+   * User Status
+   * @return userStatus
+  */
+  @Schema(name = "userStatus", defaultValue = "User Status")
+
+
+  public Integer getUserStatus() {
+    return userStatus;
+  }
+
+  public void setUserStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    User user = (User) o;
+    return Objects.equals(this.id, user.id) &&
+        Objects.equals(this.username, user.username) &&
+        Objects.equals(this.firstName, user.firstName) &&
+        Objects.equals(this.lastName, user.lastName) &&
+        Objects.equals(this.email, user.email) &&
+        Objects.equals(this.password, user.password) &&
+        Objects.equals(this.phone, user.phone) &&
+        Objects.equals(this.userStatus, user.userStatus);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class User {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    username: ").append(toIndentedString(username)).append("\n");
+    sb.append("    firstName: ").append(toIndentedString(firstName)).append("\n");
+    sb.append("    lastName: ").append(toIndentedString(lastName)).append("\n");
+    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    phone: ").append(toIndentedString(phone)).append("\n");
+    sb.append("    userStatus: ").append(toIndentedString(userStatus)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-date-time/.openapi-generator-ignore b/samples/openapi3/client/petstore/spring-cloud-date-time/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-date-time/.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/openapi3/client/petstore/spring-cloud-date-time/.openapi-generator/FILES b/samples/openapi3/client/petstore/spring-cloud-date-time/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..0849e5aac50a63660b4cf3a0f6b3b8fa5e8b1bcd
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-date-time/.openapi-generator/FILES
@@ -0,0 +1,3 @@
+README.md
+pom.xml
+src/main/java/org/openapitools/api/DefaultApi.java
diff --git a/samples/openapi3/client/petstore/spring-cloud-date-time/.openapi-generator/VERSION b/samples/openapi3/client/petstore/spring-cloud-date-time/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..0984c4c1ad213d3a352049ad557efc9bd5140752
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-date-time/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/spring-cloud-date-time/README.md b/samples/openapi3/client/petstore/spring-cloud-date-time/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a462be951ace6611621bc537aacd573e4486a38a
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-date-time/README.md
@@ -0,0 +1,26 @@
+# OpenAPI generated API stub
+
+Spring Framework stub
+
+
+## Overview
+This code was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
+By using the [OpenAPI-Spec](https://openapis.org), you can easily generate an API stub.
+This is an example of building API stub interfaces in Java using the Spring framework.
+
+The stubs generated can be used in your existing Spring-MVC or Spring-Boot application to create controller endpoints
+by adding ```@Controller``` classes that implement the interface. Eg:
+```java
+@Controller
+public class PetController implements PetApi {
+// implement all PetApi methods
+}
+```
+
+You can also use the interface to create [Spring-Cloud Feign clients](http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign-inheritance).Eg:
+```java
+@FeignClient(name="pet", url="http://petstore.swagger.io/v2")
+public interface PetClient extends PetApi {
+
+}
+```
diff --git a/samples/openapi3/client/petstore/spring-cloud-date-time/pom.xml b/samples/openapi3/client/petstore/spring-cloud-date-time/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9f8de9c14cdfa59ab2b7d1c5b5532310f18e61e2
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-date-time/pom.xml
@@ -0,0 +1,79 @@
+<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.openapi3</groupId>
+    <artifactId>spring-cloud-date-time-oas3</artifactId>
+    <packaging>jar</packaging>
+    <name>spring-cloud-date-time-oas3</name>
+    <version>1.0</version>
+    <properties>
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>2.1.11</swagger-core-version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.6.2</version>
+    </parent>
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+    </build>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-starter-parent</artifactId>
+                <version>2021.0.0</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>${swagger-core-version}</version>
+        </dependency>
+        <!-- @Nullable annotation -->
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-oauth2</artifactId>
+            <version>2.2.5.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>0.2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/samples/openapi3/client/petstore/spring-cloud-date-time/src/main/java/org/openapitools/api/DefaultApi.java b/samples/openapi3/client/petstore/spring-cloud-date-time/src/main/java/org/openapitools/api/DefaultApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..7dbf104466fb2529420b76220664d16c3ffa0017
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-date-time/src/main/java/org/openapitools/api/DefaultApi.java
@@ -0,0 +1,89 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "Default", description = "the Default API")
+public interface DefaultApi {
+
+    /**
+     * GET /thingy/{date}
+     *
+     * @param date A date path parameter (required)
+     * @param dateTime A date-time query parameter (required)
+     * @param xOrderDate A date header parameter (required)
+     * @param loginDate A date cookie parameter (optional)
+     * @return OK (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = {  },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "OK")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/thingy/{date}"
+    )
+    ResponseEntity<Void> get(
+        @Parameter(name = "date", description = "A date path parameter", required = true, schema = @Schema(description = "")) @PathVariable("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @NotNull @Parameter(name = "dateTime", description = "A date-time query parameter", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "dateTime", required = true) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @Parameter(name = "X-Order-Date", description = "A date header parameter", required = true, schema = @Schema(description = "")) @RequestHeader(value = "X-Order-Date", required = true) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate xOrderDate,
+        @Parameter(name = "loginDate", description = "A date cookie parameter", schema = @Schema(description = "")) @CookieValue("loginDate") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate loginDate
+    );
+
+
+    /**
+     * POST /thingy/{date}
+     * update with form data
+     *
+     * @param date A date path parameter (required)
+     * @param visitDate Updated last vist timestamp (optional)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "",
+        tags = {  },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/thingy/{date}",
+        consumes = "application/x-www-form-urlencoded"
+    )
+    ResponseEntity<Void> updatePetWithForm(
+        @Parameter(name = "date", description = "A date path parameter", required = true, schema = @Schema(description = "")) @PathVariable("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @Parameter(name = "visitDate", description = "Updated last vist timestamp", schema = @Schema(description = "")) @RequestParam(value="visitDate", required=false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime visitDate
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/.openapi-generator-ignore b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/.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/openapi3/client/petstore/spring-cloud-oas3-fakeapi/.openapi-generator/FILES b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..5248511085f8f64d338314f606c7106def901570
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/.openapi-generator/FILES
@@ -0,0 +1,54 @@
+README.md
+pom.xml
+src/main/java/org/openapitools/api/AnotherFakeApi.java
+src/main/java/org/openapitools/api/FakeApi.java
+src/main/java/org/openapitools/api/FakeClassnameTags123Api.java
+src/main/java/org/openapitools/api/PetApi.java
+src/main/java/org/openapitools/api/StoreApi.java
+src/main/java/org/openapitools/api/UserApi.java
+src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
+src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
+src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
+src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
+src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
+src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
+src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
+src/main/java/org/openapitools/model/AdditionalPropertiesString.java
+src/main/java/org/openapitools/model/Animal.java
+src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
+src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
+src/main/java/org/openapitools/model/ArrayTest.java
+src/main/java/org/openapitools/model/BigCat.java
+src/main/java/org/openapitools/model/BigCatAllOf.java
+src/main/java/org/openapitools/model/Capitalization.java
+src/main/java/org/openapitools/model/Cat.java
+src/main/java/org/openapitools/model/CatAllOf.java
+src/main/java/org/openapitools/model/Category.java
+src/main/java/org/openapitools/model/ClassModel.java
+src/main/java/org/openapitools/model/Client.java
+src/main/java/org/openapitools/model/Dog.java
+src/main/java/org/openapitools/model/DogAllOf.java
+src/main/java/org/openapitools/model/EnumArrays.java
+src/main/java/org/openapitools/model/EnumClass.java
+src/main/java/org/openapitools/model/EnumTest.java
+src/main/java/org/openapitools/model/FileSchemaTestClass.java
+src/main/java/org/openapitools/model/FormatTest.java
+src/main/java/org/openapitools/model/HasOnlyReadOnly.java
+src/main/java/org/openapitools/model/MapTest.java
+src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
+src/main/java/org/openapitools/model/Model200Response.java
+src/main/java/org/openapitools/model/ModelApiResponse.java
+src/main/java/org/openapitools/model/ModelReturn.java
+src/main/java/org/openapitools/model/Name.java
+src/main/java/org/openapitools/model/NumberOnly.java
+src/main/java/org/openapitools/model/Order.java
+src/main/java/org/openapitools/model/OuterComposite.java
+src/main/java/org/openapitools/model/OuterEnum.java
+src/main/java/org/openapitools/model/Pet.java
+src/main/java/org/openapitools/model/ReadOnlyFirst.java
+src/main/java/org/openapitools/model/SpecialModelName.java
+src/main/java/org/openapitools/model/Tag.java
+src/main/java/org/openapitools/model/TypeHolderDefault.java
+src/main/java/org/openapitools/model/TypeHolderExample.java
+src/main/java/org/openapitools/model/User.java
+src/main/java/org/openapitools/model/XmlItem.java
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/.openapi-generator/VERSION b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..0984c4c1ad213d3a352049ad557efc9bd5140752
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/README.md b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a462be951ace6611621bc537aacd573e4486a38a
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/README.md
@@ -0,0 +1,26 @@
+# OpenAPI generated API stub
+
+Spring Framework stub
+
+
+## Overview
+This code was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
+By using the [OpenAPI-Spec](https://openapis.org), you can easily generate an API stub.
+This is an example of building API stub interfaces in Java using the Spring framework.
+
+The stubs generated can be used in your existing Spring-MVC or Spring-Boot application to create controller endpoints
+by adding ```@Controller``` classes that implement the interface. Eg:
+```java
+@Controller
+public class PetController implements PetApi {
+// implement all PetApi methods
+}
+```
+
+You can also use the interface to create [Spring-Cloud Feign clients](http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign-inheritance).Eg:
+```java
+@FeignClient(name="pet", url="http://petstore.swagger.io/v2")
+public interface PetClient extends PetApi {
+
+}
+```
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/pom.xml b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6cf023f501f220b3498ac765295d597ed851111e
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/pom.xml
@@ -0,0 +1,79 @@
+<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.openapi3</groupId>
+    <artifactId>spring-cloud-oas3</artifactId>
+    <packaging>jar</packaging>
+    <name>spring-cloud-oas3</name>
+    <version>1.0.0</version>
+    <properties>
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>2.1.11</swagger-core-version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.6.2</version>
+    </parent>
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+    </build>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-starter-parent</artifactId>
+                <version>2021.0.0</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>${swagger-core-version}</version>
+        </dependency>
+        <!-- @Nullable annotation -->
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-oauth2</artifactId>
+            <version>2.2.5.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>0.2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/AnotherFakeApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..9085e07967bc585f44684c854bdadbfca2b9d7f9
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -0,0 +1,59 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "AnotherFake", description = "the AnotherFake API")
+public interface AnotherFakeApi {
+
+    /**
+     * PATCH /another-fake/dummy : To test special tags
+     * To test special tags and operation ID starting with number
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test special tags",
+        tags = { "$another-fake?" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/another-fake/dummy",
+        produces = "application/json",
+        consumes = "application/json"
+    )
+    ResponseEntity<Client> call123testSpecialTags(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/FakeApi.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/FakeApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..a9d785eaea3179f4fdc34f890b2121679d24066a
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/FakeApi.java
@@ -0,0 +1,443 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.math.BigDecimal;
+import org.openapitools.model.Client;
+import org.openapitools.model.FileSchemaTestClass;
+import java.time.LocalDate;
+import java.util.Map;
+import java.time.OffsetDateTime;
+import org.openapitools.model.OuterComposite;
+import org.openapitools.model.User;
+import org.openapitools.model.XmlItem;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "Fake", description = "the Fake API")
+public interface FakeApi {
+
+    /**
+     * POST /fake/create_xml_item : creates an XmlItem
+     * this route creates an XmlItem
+     *
+     * @param xmlItem XmlItem Body (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "creates an XmlItem",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/create_xml_item",
+        consumes = "application/xml"
+    )
+    ResponseEntity<Void> createXmlItem(
+        @Parameter(name = "XmlItem", description = "XmlItem Body", required = true, schema = @Schema(description = "")) @Valid @RequestBody XmlItem xmlItem
+    );
+
+
+    /**
+     * POST /fake/outer/boolean
+     * Test serialization of outer boolean types
+     *
+     * @param body Input boolean as post body (optional)
+     * @return Output boolean (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output boolean", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Boolean.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/boolean",
+        produces = "*/*"
+    )
+    ResponseEntity<Boolean> fakeOuterBooleanSerialize(
+        @Parameter(name = "body", description = "Input boolean as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) Boolean body
+    );
+
+
+    /**
+     * POST /fake/outer/composite
+     * Test serialization of object with outer number type
+     *
+     * @param body Input composite as post body (optional)
+     * @return Output composite (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output composite", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  OuterComposite.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/composite",
+        produces = "*/*"
+    )
+    ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
+        @Parameter(name = "body", description = "Input composite as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) OuterComposite body
+    );
+
+
+    /**
+     * POST /fake/outer/number
+     * Test serialization of outer number types
+     *
+     * @param body Input number as post body (optional)
+     * @return Output number (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output number", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  BigDecimal.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/number",
+        produces = "*/*"
+    )
+    ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
+        @Parameter(name = "body", description = "Input number as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) BigDecimal body
+    );
+
+
+    /**
+     * POST /fake/outer/string
+     * Test serialization of outer string types
+     *
+     * @param body Input string as post body (optional)
+     * @return Output string (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output string", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/string",
+        produces = "*/*"
+    )
+    ResponseEntity<String> fakeOuterStringSerialize(
+        @Parameter(name = "body", description = "Input string as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) String body
+    );
+
+
+    /**
+     * PUT /fake/body-with-file-schema
+     * For this test, the body for this request much reference a schema named &#x60;File&#x60;.
+     *
+     * @param body  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/body-with-file-schema",
+        consumes = "application/json"
+    )
+    ResponseEntity<Void> testBodyWithFileSchema(
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody FileSchemaTestClass body
+    );
+
+
+    /**
+     * PUT /fake/body-with-query-params
+     *
+     * @param query  (required)
+     * @param body  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/body-with-query-params",
+        consumes = "application/json"
+    )
+    ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @Parameter(name = "query", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "query", required = true) String query,
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    );
+
+
+    /**
+     * PATCH /fake : To test \&quot;client\&quot; model
+     * To test \&quot;client\&quot; model
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test \"client\" model",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/fake",
+        produces = "application/json",
+        consumes = "application/json"
+    )
+    ResponseEntity<Client> testClientModel(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    );
+
+
+    /**
+     * POST /fake : Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     * Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     *
+     * @param number None (required)
+     * @param _double None (required)
+     * @param patternWithoutDelimiter None (required)
+     * @param _byte None (required)
+     * @param integer None (optional)
+     * @param int32 None (optional)
+     * @param int64 None (optional)
+     * @param _float None (optional)
+     * @param string None (optional)
+     * @param binary None (optional)
+     * @param date None (optional)
+     * @param dateTime None (optional)
+     * @param password None (optional)
+     * @param paramCallback None (optional)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        },
+        security = {
+            @SecurityRequirement(name = "http_basic_test")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake",
+        consumes = "application/x-www-form-urlencoded"
+    )
+    ResponseEntity<Void> testEndpointParameters(
+        @Parameter(name = "number", description = "None", required = true, schema = @Schema(description = "")) @RequestParam(value="number", required=true) BigDecimal number,
+        @Parameter(name = "double", description = "None", required = true, schema = @Schema(description = "")) @RequestParam(value="double", required=true) Double _double,
+        @Parameter(name = "pattern_without_delimiter", description = "None", required = true, schema = @Schema(description = "")) @RequestParam(value="pattern_without_delimiter", required=true) String patternWithoutDelimiter,
+        @Parameter(name = "byte", description = "None", required = true, schema = @Schema(description = "")) @RequestParam(value="byte", required=true) byte[] _byte,
+        @Parameter(name = "integer", description = "None", schema = @Schema(description = "")) @RequestParam(value="integer", required=false) Integer integer,
+        @Parameter(name = "int32", description = "None", schema = @Schema(description = "")) @RequestParam(value="int32", required=false) Integer int32,
+        @Parameter(name = "int64", description = "None", schema = @Schema(description = "")) @RequestParam(value="int64", required=false) Long int64,
+        @Parameter(name = "float", description = "None", schema = @Schema(description = "")) @RequestParam(value="float", required=false) Float _float,
+        @Parameter(name = "string", description = "None", schema = @Schema(description = "")) @RequestParam(value="string", required=false) String string,
+        @Parameter(name = "binary", description = "None", schema = @Schema(description = "")) @RequestParam("binary") MultipartFile binary,
+        @Parameter(name = "date", description = "None", schema = @Schema(description = "")) @RequestParam(value="date", required=false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @Parameter(name = "dateTime", description = "None", schema = @Schema(description = "")) @RequestParam(value="dateTime", required=false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @Parameter(name = "password", description = "None", schema = @Schema(description = "")) @RequestParam(value="password", required=false) String password,
+        @Parameter(name = "callback", description = "None", schema = @Schema(description = "")) @RequestParam(value="callback", required=false) String paramCallback
+    );
+
+
+    /**
+     * GET /fake : To test enum parameters
+     * To test enum parameters
+     *
+     * @param enumHeaderStringArray Header parameter enum test (string array) (optional)
+     * @param enumHeaderString Header parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryStringArray Query parameter enum test (string array) (optional)
+     * @param enumQueryString Query parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryInteger Query parameter enum test (double) (optional)
+     * @param enumQueryDouble Query parameter enum test (double) (optional)
+     * @param enumFormStringArray Form parameter enum test (string array) (optional, default to $)
+     * @param enumFormString Form parameter enum test (string) (optional, default to -efg)
+     * @return Invalid request (status code 400)
+     *         or Not found (status code 404)
+     */
+    @Operation(
+        summary = "To test enum parameters",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid request"),
+            @ApiResponse(responseCode = "404", description = "Not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/fake",
+        consumes = "application/x-www-form-urlencoded"
+    )
+    ResponseEntity<Void> testEnumParameters(
+        @Parameter(name = "enum_header_string_array", description = "Header parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @Parameter(name = "enum_header_string", description = "Header parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @Parameter(name = "enum_query_string_array", description = "Query parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @Parameter(name = "enum_query_string", description = "Query parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @Parameter(name = "enum_query_integer", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1", "-2" })) @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @Parameter(name = "enum_query_double", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1.1", "-1.2" })) @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @Parameter(name = "enum_form_string_array", description = "Form parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @RequestParam(value="enum_form_string_array", required=false) List<String> enumFormStringArray,
+        @Parameter(name = "enum_form_string", description = "Form parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @RequestParam(value="enum_form_string", required=false) String enumFormString
+    );
+
+
+    /**
+     * DELETE /fake : Fake endpoint to test group parameters (optional)
+     * Fake endpoint to test group parameters (optional)
+     *
+     * @param requiredStringGroup Required String in group parameters (required)
+     * @param requiredBooleanGroup Required Boolean in group parameters (required)
+     * @param requiredInt64Group Required Integer in group parameters (required)
+     * @param stringGroup String in group parameters (optional)
+     * @param booleanGroup Boolean in group parameters (optional)
+     * @param int64Group Integer in group parameters (optional)
+     * @return Someting wrong (status code 400)
+     */
+    @Operation(
+        summary = "Fake endpoint to test group parameters (optional)",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Someting wrong")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/fake"
+    )
+    ResponseEntity<Void> testGroupParameters(
+        @NotNull @Parameter(name = "required_string_group", description = "Required String in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @Parameter(name = "required_boolean_group", description = "Required Boolean in group parameters", required = true, schema = @Schema(description = "")) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @Parameter(name = "required_int64_group", description = "Required Integer in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @Parameter(name = "string_group", description = "String in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @Parameter(name = "boolean_group", description = "Boolean in group parameters", schema = @Schema(description = "")) @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @Parameter(name = "int64_group", description = "Integer in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    );
+
+
+    /**
+     * POST /fake/inline-additionalProperties : test inline additionalProperties
+     *
+     * @param param request body (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "test inline additionalProperties",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/inline-additionalProperties",
+        consumes = "application/json"
+    )
+    ResponseEntity<Void> testInlineAdditionalProperties(
+        @Parameter(name = "param", description = "request body", required = true, schema = @Schema(description = "")) @Valid @RequestBody Map<String, String> param
+    );
+
+
+    /**
+     * GET /fake/jsonFormData : test json serialization of form data
+     *
+     * @param param field1 (required)
+     * @param param2 field2 (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "test json serialization of form data",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/fake/jsonFormData",
+        consumes = "application/x-www-form-urlencoded"
+    )
+    ResponseEntity<Void> testJsonFormData(
+        @Parameter(name = "param", description = "field1", required = true, schema = @Schema(description = "")) @RequestParam(value="param", required=true) String param,
+        @Parameter(name = "param2", description = "field2", required = true, schema = @Schema(description = "")) @RequestParam(value="param2", required=true) String param2
+    );
+
+
+    /**
+     * PUT /fake/test-query-parameters
+     * To test the collection format in query parameters
+     *
+     * @param pipe  (required)
+     * @param ioutil  (required)
+     * @param http  (required)
+     * @param url  (required)
+     * @param context  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/test-query-parameters"
+    )
+    ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @Parameter(name = "pipe", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @Parameter(name = "ioutil", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @Parameter(name = "http", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @Parameter(name = "url", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @Parameter(name = "context", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "context", required = true) List<String> context
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/FakeClassnameTags123Api.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/FakeClassnameTags123Api.java
new file mode 100644
index 0000000000000000000000000000000000000000..4239438bd3c1318addcba9952a723a53fed92107
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/FakeClassnameTags123Api.java
@@ -0,0 +1,62 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "FakeClassnameTags123", description = "the FakeClassnameTags123 API")
+public interface FakeClassnameTags123Api {
+
+    /**
+     * PATCH /fake_classname_test : To test class name in snake case
+     * To test class name in snake case
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test class name in snake case",
+        tags = { "fake_classname_tags 123#$%^" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key_query")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/fake_classname_test",
+        produces = "application/json",
+        consumes = "application/json"
+    )
+    ResponseEntity<Client> testClassname(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/PetApi.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/PetApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..c618e1e4d902fab58383642114f40d0432669a47
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/PetApi.java
@@ -0,0 +1,307 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.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 java.util.Set;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "Pet", description = "the Pet API")
+public interface PetApi {
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Add a new pet to the store",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet",
+        consumes = "application/json"
+    )
+    ResponseEntity<Void> addPet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    );
+
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @param apiKey  (optional)
+     * @return successful operation (status code 200)
+     *         or Invalid pet value (status code 400)
+     */
+    @Operation(
+        summary = "Deletes a pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "400", description = "Invalid pet value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/pet/{petId}"
+    )
+    ResponseEntity<Void> deletePet(
+        @Parameter(name = "petId", description = "Pet id to delete", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "api_key", description = "", schema = @Schema(description = "")) @RequestHeader(value = "api_key", required = false) String apiKey
+    );
+
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     */
+    @Operation(
+        summary = "Finds Pets by status",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid status value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByStatus",
+        produces = "application/json"
+    )
+    ResponseEntity<List<Pet>> findPetsByStatus(
+        @NotNull @Parameter(name = "status", description = "Status values that need to be considered for filter", required = true, schema = @Schema(description = "", allowableValues = { "available", "pending", "sold" })) @Valid @RequestParam(value = "status", required = true) List<String> status
+    );
+
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     */
+    @Operation(
+        summary = "Finds Pets by tags",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid tag value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByTags",
+        produces = "application/json"
+    )
+    ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @Parameter(name = "tags", description = "Tags to filter by", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    );
+
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     */
+    @Operation(
+        summary = "Find pet by ID",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/{petId}",
+        produces = "application/json"
+    )
+    ResponseEntity<Pet> getPetById(
+        @Parameter(name = "petId", description = "ID of pet to return", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId
+    );
+
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     */
+    @Operation(
+        summary = "Update an existing pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found"),
+            @ApiResponse(responseCode = "405", description = "Validation exception")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/pet",
+        consumes = "application/json"
+    )
+    ResponseEntity<Void> updatePet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    );
+
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Updates a pet in the store with form data",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}",
+        consumes = "application/x-www-form-urlencoded"
+    )
+    ResponseEntity<Void> updatePetWithForm(
+        @Parameter(name = "petId", description = "ID of pet that needs to be updated", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "name", description = "Updated name of the pet", schema = @Schema(description = "")) @RequestParam(value="name", required=false) String name,
+        @Parameter(name = "status", description = "Updated status of the pet", schema = @Schema(description = "")) @RequestParam(value="status", required=false) String status
+    );
+
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}/uploadImage",
+        produces = "application/json",
+        consumes = "multipart/form-data"
+    )
+    ResponseEntity<ModelApiResponse> uploadFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @RequestParam(value="additionalMetadata", required=false) String additionalMetadata,
+        @Parameter(name = "file", description = "file to upload", schema = @Schema(description = "")) @RequestParam("file") MultipartFile file
+    );
+
+
+    /**
+     * POST /fake/{petId}/uploadImageWithRequiredFile : uploads an image (required)
+     *
+     * @param petId ID of pet to update (required)
+     * @param requiredFile file to upload (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image (required)",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/{petId}/uploadImageWithRequiredFile",
+        produces = "application/json",
+        consumes = "multipart/form-data"
+    )
+    ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "requiredFile", description = "file to upload", required = true, schema = @Schema(description = "")) @RequestParam("requiredFile") MultipartFile requiredFile,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @RequestParam(value="additionalMetadata", required=false) String additionalMetadata
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/StoreApi.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/StoreApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..d8329e19d40b5f71f8d769035c6f27671669027f
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/StoreApi.java
@@ -0,0 +1,139 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.Map;
+import org.openapitools.model.Order;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "Store", description = "the Store API")
+public interface StoreApi {
+
+    /**
+     * DELETE /store/order/{order_id} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/store/order/{order_id}"
+    )
+    ResponseEntity<Void> deleteOrder(
+        @Parameter(name = "order_id", description = "ID of the order that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("order_id") String orderId
+    );
+
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Returns pet inventories by status",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Map.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/inventory",
+        produces = "application/json"
+    )
+    ResponseEntity<Map<String, Integer>> getInventory(
+        
+    );
+
+
+    /**
+     * GET /store/order/{order_id} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Find purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/order/{order_id}",
+        produces = "application/json"
+    )
+    ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @Parameter(name = "order_id", description = "ID of pet that needs to be fetched", required = true, schema = @Schema(description = "")) @PathVariable("order_id") Long orderId
+    );
+
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param body order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     */
+    @Operation(
+        summary = "Place an order for a pet",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid Order")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/store/order",
+        produces = "application/json"
+    )
+    ResponseEntity<Order> placeOrder(
+        @Parameter(name = "body", description = "order placed for purchasing the pet", required = true, schema = @Schema(description = "")) @Valid @RequestBody Order body
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/UserApi.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/UserApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..665546ec700ee1efd9dccf6e32198ced6f648d09
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/api/UserApi.java
@@ -0,0 +1,230 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.List;
+import java.time.OffsetDateTime;
+import org.openapitools.model.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "User", description = "the User API")
+public interface UserApi {
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param body Created user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Create user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user"
+    )
+    ResponseEntity<Void> createUser(
+        @Parameter(name = "body", description = "Created user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    );
+
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithArray"
+    )
+    ResponseEntity<Void> createUsersWithArrayInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    );
+
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithList"
+    )
+    ResponseEntity<Void> createUsersWithListInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    );
+
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/user/{username}"
+    )
+    ResponseEntity<Void> deleteUser(
+        @Parameter(name = "username", description = "The name that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    );
+
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Get user by user name",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  User.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/{username}",
+        produces = "application/json"
+    )
+    ResponseEntity<User> getUserByName(
+        @Parameter(name = "username", description = "The name that needs to be fetched. Use user1 for testing.", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    );
+
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     */
+    @Operation(
+        summary = "Logs user into the system",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username/password supplied")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/login",
+        produces = "application/json"
+    )
+    ResponseEntity<String> loginUser(
+        @NotNull @Parameter(name = "username", description = "The user name for login", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @Parameter(name = "password", description = "The password for login in clear text", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "password", required = true) String password
+    );
+
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Logs out current logged in user session",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/logout"
+    )
+    ResponseEntity<Void> logoutUser(
+        
+    );
+
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param body Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Updated user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid user supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/user/{username}"
+    )
+    ResponseEntity<Void> updateUser(
+        @Parameter(name = "username", description = "name that need to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(name = "body", description = "Updated user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c57ae7dd14cea1acd9607d0e392dd2c79257878
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesAnyType
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesAnyType extends HashMap<String, Object>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesAnyType name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesAnyType additionalPropertiesAnyType = (AdditionalPropertiesAnyType) o;
+    return Objects.equals(this.name, additionalPropertiesAnyType.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesAnyType {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5285ec2f29bb31bba95fcaef6e06e815e1101b7
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
@@ -0,0 +1,87 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesArray
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesArray extends HashMap<String, List>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesArray name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesArray additionalPropertiesArray = (AdditionalPropertiesArray) o;
+    return Objects.equals(this.name, additionalPropertiesArray.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesArray {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8ca38c286d5ac22136574721e512776c68b780d
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesBoolean
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesBoolean extends HashMap<String, Boolean>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesBoolean name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesBoolean additionalPropertiesBoolean = (AdditionalPropertiesBoolean) o;
+    return Objects.equals(this.name, additionalPropertiesBoolean.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesBoolean {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfd28ccb99637972f69d4653e63a17496210d34b
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
@@ -0,0 +1,414 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesClass   {
+  @JsonProperty("map_string")
+  @Valid
+  private Map<String, String> mapString = null;
+
+  @JsonProperty("map_number")
+  @Valid
+  private Map<String, BigDecimal> mapNumber = null;
+
+  @JsonProperty("map_integer")
+  @Valid
+  private Map<String, Integer> mapInteger = null;
+
+  @JsonProperty("map_boolean")
+  @Valid
+  private Map<String, Boolean> mapBoolean = null;
+
+  @JsonProperty("map_array_integer")
+  @Valid
+  private Map<String, List<Integer>> mapArrayInteger = null;
+
+  @JsonProperty("map_array_anytype")
+  @Valid
+  private Map<String, List<Object>> mapArrayAnytype = null;
+
+  @JsonProperty("map_map_string")
+  @Valid
+  private Map<String, Map<String, String>> mapMapString = null;
+
+  @JsonProperty("map_map_anytype")
+  @Valid
+  private Map<String, Map<String, Object>> mapMapAnytype = null;
+
+  @JsonProperty("anytype_1")
+  private Object anytype1;
+
+  @JsonProperty("anytype_2")
+  private Object anytype2;
+
+  @JsonProperty("anytype_3")
+  private Object anytype3;
+
+  public AdditionalPropertiesClass mapString(Map<String, String> mapString) {
+    this.mapString = mapString;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapStringItem(String key, String mapStringItem) {
+    if (this.mapString == null) {
+      this.mapString = new HashMap<>();
+    }
+    this.mapString.put(key, mapStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapString
+   * @return mapString
+  */
+  @Schema(name = "mapString", defaultValue = "")
+
+
+  public Map<String, String> getMapString() {
+    return mapString;
+  }
+
+  public void setMapString(Map<String, String> mapString) {
+    this.mapString = mapString;
+  }
+
+  public AdditionalPropertiesClass mapNumber(Map<String, BigDecimal> mapNumber) {
+    this.mapNumber = mapNumber;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapNumberItem(String key, BigDecimal mapNumberItem) {
+    if (this.mapNumber == null) {
+      this.mapNumber = new HashMap<>();
+    }
+    this.mapNumber.put(key, mapNumberItem);
+    return this;
+  }
+
+  /**
+   * Get mapNumber
+   * @return mapNumber
+  */
+  @Schema(name = "mapNumber", defaultValue = "")
+
+  @Valid
+
+  public Map<String, BigDecimal> getMapNumber() {
+    return mapNumber;
+  }
+
+  public void setMapNumber(Map<String, BigDecimal> mapNumber) {
+    this.mapNumber = mapNumber;
+  }
+
+  public AdditionalPropertiesClass mapInteger(Map<String, Integer> mapInteger) {
+    this.mapInteger = mapInteger;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapIntegerItem(String key, Integer mapIntegerItem) {
+    if (this.mapInteger == null) {
+      this.mapInteger = new HashMap<>();
+    }
+    this.mapInteger.put(key, mapIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get mapInteger
+   * @return mapInteger
+  */
+  @Schema(name = "mapInteger", defaultValue = "")
+
+
+  public Map<String, Integer> getMapInteger() {
+    return mapInteger;
+  }
+
+  public void setMapInteger(Map<String, Integer> mapInteger) {
+    this.mapInteger = mapInteger;
+  }
+
+  public AdditionalPropertiesClass mapBoolean(Map<String, Boolean> mapBoolean) {
+    this.mapBoolean = mapBoolean;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapBooleanItem(String key, Boolean mapBooleanItem) {
+    if (this.mapBoolean == null) {
+      this.mapBoolean = new HashMap<>();
+    }
+    this.mapBoolean.put(key, mapBooleanItem);
+    return this;
+  }
+
+  /**
+   * Get mapBoolean
+   * @return mapBoolean
+  */
+  @Schema(name = "mapBoolean", defaultValue = "")
+
+
+  public Map<String, Boolean> getMapBoolean() {
+    return mapBoolean;
+  }
+
+  public void setMapBoolean(Map<String, Boolean> mapBoolean) {
+    this.mapBoolean = mapBoolean;
+  }
+
+  public AdditionalPropertiesClass mapArrayInteger(Map<String, List<Integer>> mapArrayInteger) {
+    this.mapArrayInteger = mapArrayInteger;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapArrayIntegerItem(String key, List<Integer> mapArrayIntegerItem) {
+    if (this.mapArrayInteger == null) {
+      this.mapArrayInteger = new HashMap<>();
+    }
+    this.mapArrayInteger.put(key, mapArrayIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get mapArrayInteger
+   * @return mapArrayInteger
+  */
+  @Schema(name = "mapArrayInteger", defaultValue = "")
+
+  @Valid
+
+  public Map<String, List<Integer>> getMapArrayInteger() {
+    return mapArrayInteger;
+  }
+
+  public void setMapArrayInteger(Map<String, List<Integer>> mapArrayInteger) {
+    this.mapArrayInteger = mapArrayInteger;
+  }
+
+  public AdditionalPropertiesClass mapArrayAnytype(Map<String, List<Object>> mapArrayAnytype) {
+    this.mapArrayAnytype = mapArrayAnytype;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapArrayAnytypeItem(String key, List<Object> mapArrayAnytypeItem) {
+    if (this.mapArrayAnytype == null) {
+      this.mapArrayAnytype = new HashMap<>();
+    }
+    this.mapArrayAnytype.put(key, mapArrayAnytypeItem);
+    return this;
+  }
+
+  /**
+   * Get mapArrayAnytype
+   * @return mapArrayAnytype
+  */
+  @Schema(name = "mapArrayAnytype", defaultValue = "")
+
+  @Valid
+
+  public Map<String, List<Object>> getMapArrayAnytype() {
+    return mapArrayAnytype;
+  }
+
+  public void setMapArrayAnytype(Map<String, List<Object>> mapArrayAnytype) {
+    this.mapArrayAnytype = mapArrayAnytype;
+  }
+
+  public AdditionalPropertiesClass mapMapString(Map<String, Map<String, String>> mapMapString) {
+    this.mapMapString = mapMapString;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapMapStringItem(String key, Map<String, String> mapMapStringItem) {
+    if (this.mapMapString == null) {
+      this.mapMapString = new HashMap<>();
+    }
+    this.mapMapString.put(key, mapMapStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapString
+   * @return mapMapString
+  */
+  @Schema(name = "mapMapString", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, String>> getMapMapString() {
+    return mapMapString;
+  }
+
+  public void setMapMapString(Map<String, Map<String, String>> mapMapString) {
+    this.mapMapString = mapMapString;
+  }
+
+  public AdditionalPropertiesClass mapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
+    this.mapMapAnytype = mapMapAnytype;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapMapAnytypeItem(String key, Map<String, Object> mapMapAnytypeItem) {
+    if (this.mapMapAnytype == null) {
+      this.mapMapAnytype = new HashMap<>();
+    }
+    this.mapMapAnytype.put(key, mapMapAnytypeItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapAnytype
+   * @return mapMapAnytype
+  */
+  @Schema(name = "mapMapAnytype", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, Object>> getMapMapAnytype() {
+    return mapMapAnytype;
+  }
+
+  public void setMapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
+    this.mapMapAnytype = mapMapAnytype;
+  }
+
+  public AdditionalPropertiesClass anytype1(Object anytype1) {
+    this.anytype1 = anytype1;
+    return this;
+  }
+
+  /**
+   * Get anytype1
+   * @return anytype1
+  */
+  @Schema(name = "anytype1", defaultValue = "")
+
+
+  public Object getAnytype1() {
+    return anytype1;
+  }
+
+  public void setAnytype1(Object anytype1) {
+    this.anytype1 = anytype1;
+  }
+
+  public AdditionalPropertiesClass anytype2(Object anytype2) {
+    this.anytype2 = anytype2;
+    return this;
+  }
+
+  /**
+   * Get anytype2
+   * @return anytype2
+  */
+  @Schema(name = "anytype2", defaultValue = "")
+
+
+  public Object getAnytype2() {
+    return anytype2;
+  }
+
+  public void setAnytype2(Object anytype2) {
+    this.anytype2 = anytype2;
+  }
+
+  public AdditionalPropertiesClass anytype3(Object anytype3) {
+    this.anytype3 = anytype3;
+    return this;
+  }
+
+  /**
+   * Get anytype3
+   * @return anytype3
+  */
+  @Schema(name = "anytype3", defaultValue = "")
+
+
+  public Object getAnytype3() {
+    return anytype3;
+  }
+
+  public void setAnytype3(Object anytype3) {
+    this.anytype3 = anytype3;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesClass additionalPropertiesClass = (AdditionalPropertiesClass) o;
+    return Objects.equals(this.mapString, additionalPropertiesClass.mapString) &&
+        Objects.equals(this.mapNumber, additionalPropertiesClass.mapNumber) &&
+        Objects.equals(this.mapInteger, additionalPropertiesClass.mapInteger) &&
+        Objects.equals(this.mapBoolean, additionalPropertiesClass.mapBoolean) &&
+        Objects.equals(this.mapArrayInteger, additionalPropertiesClass.mapArrayInteger) &&
+        Objects.equals(this.mapArrayAnytype, additionalPropertiesClass.mapArrayAnytype) &&
+        Objects.equals(this.mapMapString, additionalPropertiesClass.mapMapString) &&
+        Objects.equals(this.mapMapAnytype, additionalPropertiesClass.mapMapAnytype) &&
+        Objects.equals(this.anytype1, additionalPropertiesClass.anytype1) &&
+        Objects.equals(this.anytype2, additionalPropertiesClass.anytype2) &&
+        Objects.equals(this.anytype3, additionalPropertiesClass.anytype3);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(mapString, mapNumber, mapInteger, mapBoolean, mapArrayInteger, mapArrayAnytype, mapMapString, mapMapAnytype, anytype1, anytype2, anytype3);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesClass {\n");
+    
+    sb.append("    mapString: ").append(toIndentedString(mapString)).append("\n");
+    sb.append("    mapNumber: ").append(toIndentedString(mapNumber)).append("\n");
+    sb.append("    mapInteger: ").append(toIndentedString(mapInteger)).append("\n");
+    sb.append("    mapBoolean: ").append(toIndentedString(mapBoolean)).append("\n");
+    sb.append("    mapArrayInteger: ").append(toIndentedString(mapArrayInteger)).append("\n");
+    sb.append("    mapArrayAnytype: ").append(toIndentedString(mapArrayAnytype)).append("\n");
+    sb.append("    mapMapString: ").append(toIndentedString(mapMapString)).append("\n");
+    sb.append("    mapMapAnytype: ").append(toIndentedString(mapMapAnytype)).append("\n");
+    sb.append("    anytype1: ").append(toIndentedString(anytype1)).append("\n");
+    sb.append("    anytype2: ").append(toIndentedString(anytype2)).append("\n");
+    sb.append("    anytype3: ").append(toIndentedString(anytype3)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fea577ab44bc610a5b2f663c9424ca16e773b02
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesInteger
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesInteger extends HashMap<String, Integer>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesInteger name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesInteger additionalPropertiesInteger = (AdditionalPropertiesInteger) o;
+    return Objects.equals(this.name, additionalPropertiesInteger.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesInteger {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6eee612a24fecb0da4e4e2cddb8c7d68ef42534
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
@@ -0,0 +1,87 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesNumber
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesNumber extends HashMap<String, BigDecimal>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesNumber name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesNumber additionalPropertiesNumber = (AdditionalPropertiesNumber) o;
+    return Objects.equals(this.name, additionalPropertiesNumber.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesNumber {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7116bd7572cef9114d1110e4f546295b5fb9b25
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesObject
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesObject extends HashMap<String, Map>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesObject name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesObject additionalPropertiesObject = (AdditionalPropertiesObject) o;
+    return Objects.equals(this.name, additionalPropertiesObject.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesObject {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesString.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2022be266fbf1947c18de4430af4faa605595f3
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesString
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesString extends HashMap<String, String>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesString name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesString additionalPropertiesString = (AdditionalPropertiesString) o;
+    return Objects.equals(this.name, additionalPropertiesString.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesString {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Animal.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Animal.java
new file mode 100644
index 0000000000000000000000000000000000000000..6f096d5069edf4f60558ff11cd2b2f1902eda228
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Animal.java
@@ -0,0 +1,118 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Animal
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "className", visible = true)
+@JsonSubTypes({
+  @JsonSubTypes.Type(value = BigCat.class, name = "BigCat"),
+  @JsonSubTypes.Type(value = Cat.class, name = "Cat"),
+  @JsonSubTypes.Type(value = Dog.class, name = "Dog"),
+})
+
+public class Animal   {
+  @JsonProperty("className")
+  private String className;
+
+  @JsonProperty("color")
+  private String color = "red";
+
+  public Animal className(String className) {
+    this.className = className;
+    return this;
+  }
+
+  /**
+   * Get className
+   * @return className
+  */
+  @Schema(name = "className", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getClassName() {
+    return className;
+  }
+
+  public void setClassName(String className) {
+    this.className = className;
+  }
+
+  public Animal color(String color) {
+    this.color = color;
+    return this;
+  }
+
+  /**
+   * Get color
+   * @return color
+  */
+  @Schema(name = "color", defaultValue = "")
+
+
+  public String getColor() {
+    return color;
+  }
+
+  public void setColor(String color) {
+    this.color = color;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Animal animal = (Animal) o;
+    return Objects.equals(this.className, animal.className) &&
+        Objects.equals(this.color, animal.color);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(className, color);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Animal {\n");
+    
+    sb.append("    className: ").append(toIndentedString(className)).append("\n");
+    sb.append("    color: ").append(toIndentedString(color)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebe36ad761a9c112d97adf5f724aea0cfd556975
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
@@ -0,0 +1,96 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayOfArrayOfNumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfArrayOfNumberOnly   {
+  @JsonProperty("ArrayArrayNumber")
+  @Valid
+  private List<List<BigDecimal>> arrayArrayNumber = null;
+
+  public ArrayOfArrayOfNumberOnly arrayArrayNumber(List<List<BigDecimal>> arrayArrayNumber) {
+    this.arrayArrayNumber = arrayArrayNumber;
+    return this;
+  }
+
+  public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List<BigDecimal> arrayArrayNumberItem) {
+    if (this.arrayArrayNumber == null) {
+      this.arrayArrayNumber = new ArrayList<>();
+    }
+    this.arrayArrayNumber.add(arrayArrayNumberItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayNumber
+   * @return arrayArrayNumber
+  */
+  @Schema(name = "arrayArrayNumber", defaultValue = "")
+
+  @Valid
+
+  public List<List<BigDecimal>> getArrayArrayNumber() {
+    return arrayArrayNumber;
+  }
+
+  public void setArrayArrayNumber(List<List<BigDecimal>> arrayArrayNumber) {
+    this.arrayArrayNumber = arrayArrayNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayOfArrayOfNumberOnly arrayOfArrayOfNumberOnly = (ArrayOfArrayOfNumberOnly) o;
+    return Objects.equals(this.arrayArrayNumber, arrayOfArrayOfNumberOnly.arrayArrayNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayArrayNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayOfArrayOfNumberOnly {\n");
+    
+    sb.append("    arrayArrayNumber: ").append(toIndentedString(arrayArrayNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..8158dd44ab88aaf69dd18b4c136ff094d8e33b02
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
@@ -0,0 +1,96 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayOfNumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfNumberOnly   {
+  @JsonProperty("ArrayNumber")
+  @Valid
+  private List<BigDecimal> arrayNumber = null;
+
+  public ArrayOfNumberOnly arrayNumber(List<BigDecimal> arrayNumber) {
+    this.arrayNumber = arrayNumber;
+    return this;
+  }
+
+  public ArrayOfNumberOnly addArrayNumberItem(BigDecimal arrayNumberItem) {
+    if (this.arrayNumber == null) {
+      this.arrayNumber = new ArrayList<>();
+    }
+    this.arrayNumber.add(arrayNumberItem);
+    return this;
+  }
+
+  /**
+   * Get arrayNumber
+   * @return arrayNumber
+  */
+  @Schema(name = "arrayNumber", defaultValue = "")
+
+  @Valid
+
+  public List<BigDecimal> getArrayNumber() {
+    return arrayNumber;
+  }
+
+  public void setArrayNumber(List<BigDecimal> arrayNumber) {
+    this.arrayNumber = arrayNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayOfNumberOnly arrayOfNumberOnly = (ArrayOfNumberOnly) o;
+    return Objects.equals(this.arrayNumber, arrayOfNumberOnly.arrayNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayOfNumberOnly {\n");
+    
+    sb.append("    arrayNumber: ").append(toIndentedString(arrayNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ArrayTest.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ArrayTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..420010561bcde88cb30eda512eb9fb4ca45779ac
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ArrayTest.java
@@ -0,0 +1,165 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.model.ReadOnlyFirst;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayTest   {
+  @JsonProperty("array_of_string")
+  @Valid
+  private List<String> arrayOfString = null;
+
+  @JsonProperty("array_array_of_integer")
+  @Valid
+  private List<List<Long>> arrayArrayOfInteger = null;
+
+  @JsonProperty("array_array_of_model")
+  @Valid
+  private List<List<ReadOnlyFirst>> arrayArrayOfModel = null;
+
+  public ArrayTest arrayOfString(List<String> arrayOfString) {
+    this.arrayOfString = arrayOfString;
+    return this;
+  }
+
+  public ArrayTest addArrayOfStringItem(String arrayOfStringItem) {
+    if (this.arrayOfString == null) {
+      this.arrayOfString = new ArrayList<>();
+    }
+    this.arrayOfString.add(arrayOfStringItem);
+    return this;
+  }
+
+  /**
+   * Get arrayOfString
+   * @return arrayOfString
+  */
+  @Schema(name = "arrayOfString", defaultValue = "")
+
+
+  public List<String> getArrayOfString() {
+    return arrayOfString;
+  }
+
+  public void setArrayOfString(List<String> arrayOfString) {
+    this.arrayOfString = arrayOfString;
+  }
+
+  public ArrayTest arrayArrayOfInteger(List<List<Long>> arrayArrayOfInteger) {
+    this.arrayArrayOfInteger = arrayArrayOfInteger;
+    return this;
+  }
+
+  public ArrayTest addArrayArrayOfIntegerItem(List<Long> arrayArrayOfIntegerItem) {
+    if (this.arrayArrayOfInteger == null) {
+      this.arrayArrayOfInteger = new ArrayList<>();
+    }
+    this.arrayArrayOfInteger.add(arrayArrayOfIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayOfInteger
+   * @return arrayArrayOfInteger
+  */
+  @Schema(name = "arrayArrayOfInteger", defaultValue = "")
+
+  @Valid
+
+  public List<List<Long>> getArrayArrayOfInteger() {
+    return arrayArrayOfInteger;
+  }
+
+  public void setArrayArrayOfInteger(List<List<Long>> arrayArrayOfInteger) {
+    this.arrayArrayOfInteger = arrayArrayOfInteger;
+  }
+
+  public ArrayTest arrayArrayOfModel(List<List<ReadOnlyFirst>> arrayArrayOfModel) {
+    this.arrayArrayOfModel = arrayArrayOfModel;
+    return this;
+  }
+
+  public ArrayTest addArrayArrayOfModelItem(List<ReadOnlyFirst> arrayArrayOfModelItem) {
+    if (this.arrayArrayOfModel == null) {
+      this.arrayArrayOfModel = new ArrayList<>();
+    }
+    this.arrayArrayOfModel.add(arrayArrayOfModelItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayOfModel
+   * @return arrayArrayOfModel
+  */
+  @Schema(name = "arrayArrayOfModel", defaultValue = "")
+
+  @Valid
+
+  public List<List<ReadOnlyFirst>> getArrayArrayOfModel() {
+    return arrayArrayOfModel;
+  }
+
+  public void setArrayArrayOfModel(List<List<ReadOnlyFirst>> arrayArrayOfModel) {
+    this.arrayArrayOfModel = arrayArrayOfModel;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayTest arrayTest = (ArrayTest) o;
+    return Objects.equals(this.arrayOfString, arrayTest.arrayOfString) &&
+        Objects.equals(this.arrayArrayOfInteger, arrayTest.arrayArrayOfInteger) &&
+        Objects.equals(this.arrayArrayOfModel, arrayTest.arrayArrayOfModel);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayOfString, arrayArrayOfInteger, arrayArrayOfModel);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayTest {\n");
+    
+    sb.append("    arrayOfString: ").append(toIndentedString(arrayOfString)).append("\n");
+    sb.append("    arrayArrayOfInteger: ").append(toIndentedString(arrayArrayOfInteger)).append("\n");
+    sb.append("    arrayArrayOfModel: ").append(toIndentedString(arrayArrayOfModel)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/BigCat.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/BigCat.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f4a080ad8d207649ed357bd5b170142b921935f
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/BigCat.java
@@ -0,0 +1,126 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.BigCatAllOf;
+import org.openapitools.model.Cat;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * BigCat
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class BigCat extends Cat  {
+  /**
+   * Gets or Sets kind
+   */
+  public enum KindEnum {
+    LIONS("lions"),
+    
+    TIGERS("tigers"),
+    
+    LEOPARDS("leopards"),
+    
+    JAGUARS("jaguars");
+
+    private String value;
+
+    KindEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static KindEnum fromValue(String value) {
+      for (KindEnum b : KindEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("kind")
+  private KindEnum kind;
+
+  public BigCat kind(KindEnum kind) {
+    this.kind = kind;
+    return this;
+  }
+
+  /**
+   * Get kind
+   * @return kind
+  */
+  @Schema(name = "kind", defaultValue = "")
+
+
+  public KindEnum getKind() {
+    return kind;
+  }
+
+  public void setKind(KindEnum kind) {
+    this.kind = kind;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BigCat bigCat = (BigCat) o;
+    return Objects.equals(this.kind, bigCat.kind) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(kind, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BigCat {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    kind: ").append(toIndentedString(kind)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/BigCatAllOf.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/BigCatAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..d0a47ab5127c66f1da66cb709a5a94d3ddf03bfe
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/BigCatAllOf.java
@@ -0,0 +1,123 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * BigCatAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class BigCatAllOf   {
+  /**
+   * Gets or Sets kind
+   */
+  public enum KindEnum {
+    LIONS("lions"),
+    
+    TIGERS("tigers"),
+    
+    LEOPARDS("leopards"),
+    
+    JAGUARS("jaguars");
+
+    private String value;
+
+    KindEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static KindEnum fromValue(String value) {
+      for (KindEnum b : KindEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("kind")
+  private KindEnum kind;
+
+  public BigCatAllOf kind(KindEnum kind) {
+    this.kind = kind;
+    return this;
+  }
+
+  /**
+   * Get kind
+   * @return kind
+  */
+  @Schema(name = "kind", defaultValue = "")
+
+
+  public KindEnum getKind() {
+    return kind;
+  }
+
+  public void setKind(KindEnum kind) {
+    this.kind = kind;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BigCatAllOf bigCatAllOf = (BigCatAllOf) o;
+    return Objects.equals(this.kind, bigCatAllOf.kind);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(kind);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BigCatAllOf {\n");
+    
+    sb.append("    kind: ").append(toIndentedString(kind)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Capitalization.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Capitalization.java
new file mode 100644
index 0000000000000000000000000000000000000000..92d9a7245f168d96d975f14ce65aac2276c59f73
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Capitalization.java
@@ -0,0 +1,208 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Capitalization
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Capitalization   {
+  @JsonProperty("smallCamel")
+  private String smallCamel;
+
+  @JsonProperty("CapitalCamel")
+  private String capitalCamel;
+
+  @JsonProperty("small_Snake")
+  private String smallSnake;
+
+  @JsonProperty("Capital_Snake")
+  private String capitalSnake;
+
+  @JsonProperty("SCA_ETH_Flow_Points")
+  private String scAETHFlowPoints;
+
+  @JsonProperty("ATT_NAME")
+  private String ATT_NAME;
+
+  public Capitalization smallCamel(String smallCamel) {
+    this.smallCamel = smallCamel;
+    return this;
+  }
+
+  /**
+   * Get smallCamel
+   * @return smallCamel
+  */
+  @Schema(name = "smallCamel", defaultValue = "")
+
+
+  public String getSmallCamel() {
+    return smallCamel;
+  }
+
+  public void setSmallCamel(String smallCamel) {
+    this.smallCamel = smallCamel;
+  }
+
+  public Capitalization capitalCamel(String capitalCamel) {
+    this.capitalCamel = capitalCamel;
+    return this;
+  }
+
+  /**
+   * Get capitalCamel
+   * @return capitalCamel
+  */
+  @Schema(name = "capitalCamel", defaultValue = "")
+
+
+  public String getCapitalCamel() {
+    return capitalCamel;
+  }
+
+  public void setCapitalCamel(String capitalCamel) {
+    this.capitalCamel = capitalCamel;
+  }
+
+  public Capitalization smallSnake(String smallSnake) {
+    this.smallSnake = smallSnake;
+    return this;
+  }
+
+  /**
+   * Get smallSnake
+   * @return smallSnake
+  */
+  @Schema(name = "smallSnake", defaultValue = "")
+
+
+  public String getSmallSnake() {
+    return smallSnake;
+  }
+
+  public void setSmallSnake(String smallSnake) {
+    this.smallSnake = smallSnake;
+  }
+
+  public Capitalization capitalSnake(String capitalSnake) {
+    this.capitalSnake = capitalSnake;
+    return this;
+  }
+
+  /**
+   * Get capitalSnake
+   * @return capitalSnake
+  */
+  @Schema(name = "capitalSnake", defaultValue = "")
+
+
+  public String getCapitalSnake() {
+    return capitalSnake;
+  }
+
+  public void setCapitalSnake(String capitalSnake) {
+    this.capitalSnake = capitalSnake;
+  }
+
+  public Capitalization scAETHFlowPoints(String scAETHFlowPoints) {
+    this.scAETHFlowPoints = scAETHFlowPoints;
+    return this;
+  }
+
+  /**
+   * Get scAETHFlowPoints
+   * @return scAETHFlowPoints
+  */
+  @Schema(name = "scAETHFlowPoints", defaultValue = "")
+
+
+  public String getScAETHFlowPoints() {
+    return scAETHFlowPoints;
+  }
+
+  public void setScAETHFlowPoints(String scAETHFlowPoints) {
+    this.scAETHFlowPoints = scAETHFlowPoints;
+  }
+
+  public Capitalization ATT_NAME(String ATT_NAME) {
+    this.ATT_NAME = ATT_NAME;
+    return this;
+  }
+
+  /**
+   * Name of the pet 
+   * @return ATT_NAME
+  */
+  @Schema(name = "ATT_NAME", defaultValue = "Name of the pet ")
+
+
+  public String getATTNAME() {
+    return ATT_NAME;
+  }
+
+  public void setATTNAME(String ATT_NAME) {
+    this.ATT_NAME = ATT_NAME;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Capitalization capitalization = (Capitalization) o;
+    return Objects.equals(this.smallCamel, capitalization.smallCamel) &&
+        Objects.equals(this.capitalCamel, capitalization.capitalCamel) &&
+        Objects.equals(this.smallSnake, capitalization.smallSnake) &&
+        Objects.equals(this.capitalSnake, capitalization.capitalSnake) &&
+        Objects.equals(this.scAETHFlowPoints, capitalization.scAETHFlowPoints) &&
+        Objects.equals(this.ATT_NAME, capitalization.ATT_NAME);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(smallCamel, capitalCamel, smallSnake, capitalSnake, scAETHFlowPoints, ATT_NAME);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Capitalization {\n");
+    
+    sb.append("    smallCamel: ").append(toIndentedString(smallCamel)).append("\n");
+    sb.append("    capitalCamel: ").append(toIndentedString(capitalCamel)).append("\n");
+    sb.append("    smallSnake: ").append(toIndentedString(smallSnake)).append("\n");
+    sb.append("    capitalSnake: ").append(toIndentedString(capitalSnake)).append("\n");
+    sb.append("    scAETHFlowPoints: ").append(toIndentedString(scAETHFlowPoints)).append("\n");
+    sb.append("    ATT_NAME: ").append(toIndentedString(ATT_NAME)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Cat.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Cat.java
new file mode 100644
index 0000000000000000000000000000000000000000..2e496fb4accd023274cd8876f918d9bc81830216
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Cat.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.model.Animal;
+import org.openapitools.model.CatAllOf;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Cat
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Cat extends Animal  {
+  @JsonProperty("declawed")
+  private Boolean declawed;
+
+  public Cat declawed(Boolean declawed) {
+    this.declawed = declawed;
+    return this;
+  }
+
+  /**
+   * Get declawed
+   * @return declawed
+  */
+  @Schema(name = "declawed", defaultValue = "")
+
+
+  public Boolean getDeclawed() {
+    return declawed;
+  }
+
+  public void setDeclawed(Boolean declawed) {
+    this.declawed = declawed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Cat cat = (Cat) o;
+    return Objects.equals(this.declawed, cat.declawed) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(declawed, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Cat {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    declawed: ").append(toIndentedString(declawed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/CatAllOf.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/CatAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..b732a62b1bc3c125f93944e64bd0e7ddcee8b596
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/CatAllOf.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * CatAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class CatAllOf   {
+  @JsonProperty("declawed")
+  private Boolean declawed;
+
+  public CatAllOf declawed(Boolean declawed) {
+    this.declawed = declawed;
+    return this;
+  }
+
+  /**
+   * Get declawed
+   * @return declawed
+  */
+  @Schema(name = "declawed", defaultValue = "")
+
+
+  public Boolean getDeclawed() {
+    return declawed;
+  }
+
+  public void setDeclawed(Boolean declawed) {
+    this.declawed = declawed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CatAllOf catAllOf = (CatAllOf) o;
+    return Objects.equals(this.declawed, catAllOf.declawed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(declawed);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CatAllOf {\n");
+    
+    sb.append("    declawed: ").append(toIndentedString(declawed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Category.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Category.java
new file mode 100644
index 0000000000000000000000000000000000000000..038fc8df3afd7211ee72d0f74168dbf1423bfb14
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Category.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Category
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Category   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name = "default-name";
+
+  public Category id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Category name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Category category = (Category) o;
+    return Objects.equals(this.id, category.id) &&
+        Objects.equals(this.name, category.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Category {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ClassModel.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ClassModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa2a736f4fb527cad6a7a173117b0a211b4e5923
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ClassModel.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model with \&quot;_class\&quot; property
+ */
+@Schema(name = "ClassModel",description = "Model for testing model with \"_class\" property")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ClassModel   {
+  @JsonProperty("_class")
+  private String propertyClass;
+
+  public ClassModel propertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+    return this;
+  }
+
+  /**
+   * Get propertyClass
+   * @return propertyClass
+  */
+  @Schema(name = "propertyClass", defaultValue = "")
+
+
+  public String getPropertyClass() {
+    return propertyClass;
+  }
+
+  public void setPropertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ClassModel classModel = (ClassModel) o;
+    return Objects.equals(this.propertyClass, classModel.propertyClass);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(propertyClass);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ClassModel {\n");
+    
+    sb.append("    propertyClass: ").append(toIndentedString(propertyClass)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Client.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..e11bd4ff1b13d8e49d80ca56033f92f6b92d4a7f
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Client.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Client
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Client   {
+  @JsonProperty("client")
+  private String client;
+
+  public Client client(String client) {
+    this.client = client;
+    return this;
+  }
+
+  /**
+   * Get client
+   * @return client
+  */
+  @Schema(name = "client", defaultValue = "")
+
+
+  public String getClient() {
+    return client;
+  }
+
+  public void setClient(String client) {
+    this.client = client;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Client client = (Client) o;
+    return Objects.equals(this.client, client.client);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(client);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Client {\n");
+    
+    sb.append("    client: ").append(toIndentedString(client)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Dog.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Dog.java
new file mode 100644
index 0000000000000000000000000000000000000000..ed5dc71a4ba24b421e4506efab00505af4d47fad
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Dog.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.model.Animal;
+import org.openapitools.model.DogAllOf;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Dog
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Dog extends Animal  {
+  @JsonProperty("breed")
+  private String breed;
+
+  public Dog breed(String breed) {
+    this.breed = breed;
+    return this;
+  }
+
+  /**
+   * Get breed
+   * @return breed
+  */
+  @Schema(name = "breed", defaultValue = "")
+
+
+  public String getBreed() {
+    return breed;
+  }
+
+  public void setBreed(String breed) {
+    this.breed = breed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Dog dog = (Dog) o;
+    return Objects.equals(this.breed, dog.breed) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(breed, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Dog {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    breed: ").append(toIndentedString(breed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/DogAllOf.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/DogAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c99bc376c3478a650e5f776f10c07b1921f7dd1
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/DogAllOf.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * DogAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class DogAllOf   {
+  @JsonProperty("breed")
+  private String breed;
+
+  public DogAllOf breed(String breed) {
+    this.breed = breed;
+    return this;
+  }
+
+  /**
+   * Get breed
+   * @return breed
+  */
+  @Schema(name = "breed", defaultValue = "")
+
+
+  public String getBreed() {
+    return breed;
+  }
+
+  public void setBreed(String breed) {
+    this.breed = breed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    DogAllOf dogAllOf = (DogAllOf) o;
+    return Objects.equals(this.breed, dogAllOf.breed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(breed);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class DogAllOf {\n");
+    
+    sb.append("    breed: ").append(toIndentedString(breed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/EnumArrays.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/EnumArrays.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1b2df0716a2aa0e29529f3c8b7c884739cb591c
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/EnumArrays.java
@@ -0,0 +1,190 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * EnumArrays
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class EnumArrays   {
+  /**
+   * Gets or Sets justSymbol
+   */
+  public enum JustSymbolEnum {
+    GREATER_THAN_OR_EQUAL_TO(">="),
+    
+    DOLLAR("$");
+
+    private String value;
+
+    JustSymbolEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static JustSymbolEnum fromValue(String value) {
+      for (JustSymbolEnum b : JustSymbolEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("just_symbol")
+  private JustSymbolEnum justSymbol;
+
+  /**
+   * Gets or Sets arrayEnum
+   */
+  public enum ArrayEnumEnum {
+    FISH("fish"),
+    
+    CRAB("crab");
+
+    private String value;
+
+    ArrayEnumEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static ArrayEnumEnum fromValue(String value) {
+      for (ArrayEnumEnum b : ArrayEnumEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("array_enum")
+  @Valid
+  private List<ArrayEnumEnum> arrayEnum = null;
+
+  public EnumArrays justSymbol(JustSymbolEnum justSymbol) {
+    this.justSymbol = justSymbol;
+    return this;
+  }
+
+  /**
+   * Get justSymbol
+   * @return justSymbol
+  */
+  @Schema(name = "justSymbol", defaultValue = "")
+
+
+  public JustSymbolEnum getJustSymbol() {
+    return justSymbol;
+  }
+
+  public void setJustSymbol(JustSymbolEnum justSymbol) {
+    this.justSymbol = justSymbol;
+  }
+
+  public EnumArrays arrayEnum(List<ArrayEnumEnum> arrayEnum) {
+    this.arrayEnum = arrayEnum;
+    return this;
+  }
+
+  public EnumArrays addArrayEnumItem(ArrayEnumEnum arrayEnumItem) {
+    if (this.arrayEnum == null) {
+      this.arrayEnum = new ArrayList<>();
+    }
+    this.arrayEnum.add(arrayEnumItem);
+    return this;
+  }
+
+  /**
+   * Get arrayEnum
+   * @return arrayEnum
+  */
+  @Schema(name = "arrayEnum", defaultValue = "")
+
+
+  public List<ArrayEnumEnum> getArrayEnum() {
+    return arrayEnum;
+  }
+
+  public void setArrayEnum(List<ArrayEnumEnum> arrayEnum) {
+    this.arrayEnum = arrayEnum;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    EnumArrays enumArrays = (EnumArrays) o;
+    return Objects.equals(this.justSymbol, enumArrays.justSymbol) &&
+        Objects.equals(this.arrayEnum, enumArrays.arrayEnum);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(justSymbol, arrayEnum);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class EnumArrays {\n");
+    
+    sb.append("    justSymbol: ").append(toIndentedString(justSymbol)).append("\n");
+    sb.append("    arrayEnum: ").append(toIndentedString(arrayEnum)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/EnumClass.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/EnumClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3d30c1ad453729c1e301ec513b2ad9bb8a3f600
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/EnumClass.java
@@ -0,0 +1,55 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets EnumClass
+ */
+public enum EnumClass {
+  
+  _ABC("_abc"),
+  
+  _EFG("-efg"),
+  
+  _XYZ_("(xyz)");
+
+  private String value;
+
+  EnumClass(String value) {
+    this.value = value;
+  }
+
+  @JsonValue
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(value);
+  }
+
+  @JsonCreator
+  public static EnumClass fromValue(String value) {
+    for (EnumClass b : EnumClass.values()) {
+      if (b.value.equals(value)) {
+        return b;
+      }
+    }
+    throw new IllegalArgumentException("Unexpected value '" + value + "'");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/EnumTest.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/EnumTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..938af53e2b816bd12614e5cfa329b6a5c9737b4a
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/EnumTest.java
@@ -0,0 +1,331 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.OuterEnum;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * EnumTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class EnumTest   {
+  /**
+   * Gets or Sets enumString
+   */
+  public enum EnumStringEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower"),
+    
+    EMPTY("");
+
+    private String value;
+
+    EnumStringEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumStringEnum fromValue(String value) {
+      for (EnumStringEnum b : EnumStringEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_string")
+  private EnumStringEnum enumString;
+
+  /**
+   * Gets or Sets enumStringRequired
+   */
+  public enum EnumStringRequiredEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower"),
+    
+    EMPTY("");
+
+    private String value;
+
+    EnumStringRequiredEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumStringRequiredEnum fromValue(String value) {
+      for (EnumStringRequiredEnum b : EnumStringRequiredEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_string_required")
+  private EnumStringRequiredEnum enumStringRequired;
+
+  /**
+   * Gets or Sets enumInteger
+   */
+  public enum EnumIntegerEnum {
+    NUMBER_1(1),
+    
+    NUMBER_MINUS_1(-1);
+
+    private Integer value;
+
+    EnumIntegerEnum(Integer value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public Integer getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumIntegerEnum fromValue(Integer value) {
+      for (EnumIntegerEnum b : EnumIntegerEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_integer")
+  private EnumIntegerEnum enumInteger;
+
+  /**
+   * Gets or Sets enumNumber
+   */
+  public enum EnumNumberEnum {
+    NUMBER_1_DOT_1(1.1),
+    
+    NUMBER_MINUS_1_DOT_2(-1.2);
+
+    private Double value;
+
+    EnumNumberEnum(Double value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public Double getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumNumberEnum fromValue(Double value) {
+      for (EnumNumberEnum b : EnumNumberEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_number")
+  private EnumNumberEnum enumNumber;
+
+  @JsonProperty("outerEnum")
+  private OuterEnum outerEnum;
+
+  public EnumTest enumString(EnumStringEnum enumString) {
+    this.enumString = enumString;
+    return this;
+  }
+
+  /**
+   * Get enumString
+   * @return enumString
+  */
+  @Schema(name = "enumString", defaultValue = "")
+
+
+  public EnumStringEnum getEnumString() {
+    return enumString;
+  }
+
+  public void setEnumString(EnumStringEnum enumString) {
+    this.enumString = enumString;
+  }
+
+  public EnumTest enumStringRequired(EnumStringRequiredEnum enumStringRequired) {
+    this.enumStringRequired = enumStringRequired;
+    return this;
+  }
+
+  /**
+   * Get enumStringRequired
+   * @return enumStringRequired
+  */
+  @Schema(name = "enumStringRequired", required = true, defaultValue = "")
+  @NotNull
+
+
+  public EnumStringRequiredEnum getEnumStringRequired() {
+    return enumStringRequired;
+  }
+
+  public void setEnumStringRequired(EnumStringRequiredEnum enumStringRequired) {
+    this.enumStringRequired = enumStringRequired;
+  }
+
+  public EnumTest enumInteger(EnumIntegerEnum enumInteger) {
+    this.enumInteger = enumInteger;
+    return this;
+  }
+
+  /**
+   * Get enumInteger
+   * @return enumInteger
+  */
+  @Schema(name = "enumInteger", defaultValue = "")
+
+
+  public EnumIntegerEnum getEnumInteger() {
+    return enumInteger;
+  }
+
+  public void setEnumInteger(EnumIntegerEnum enumInteger) {
+    this.enumInteger = enumInteger;
+  }
+
+  public EnumTest enumNumber(EnumNumberEnum enumNumber) {
+    this.enumNumber = enumNumber;
+    return this;
+  }
+
+  /**
+   * Get enumNumber
+   * @return enumNumber
+  */
+  @Schema(name = "enumNumber", defaultValue = "")
+
+
+  public EnumNumberEnum getEnumNumber() {
+    return enumNumber;
+  }
+
+  public void setEnumNumber(EnumNumberEnum enumNumber) {
+    this.enumNumber = enumNumber;
+  }
+
+  public EnumTest outerEnum(OuterEnum outerEnum) {
+    this.outerEnum = outerEnum;
+    return this;
+  }
+
+  /**
+   * Get outerEnum
+   * @return outerEnum
+  */
+  @Schema(name = "outerEnum", defaultValue = "")
+
+  @Valid
+
+  public OuterEnum getOuterEnum() {
+    return outerEnum;
+  }
+
+  public void setOuterEnum(OuterEnum outerEnum) {
+    this.outerEnum = outerEnum;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    EnumTest enumTest = (EnumTest) o;
+    return Objects.equals(this.enumString, enumTest.enumString) &&
+        Objects.equals(this.enumStringRequired, enumTest.enumStringRequired) &&
+        Objects.equals(this.enumInteger, enumTest.enumInteger) &&
+        Objects.equals(this.enumNumber, enumTest.enumNumber) &&
+        Objects.equals(this.outerEnum, enumTest.outerEnum);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(enumString, enumStringRequired, enumInteger, enumNumber, outerEnum);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class EnumTest {\n");
+    
+    sb.append("    enumString: ").append(toIndentedString(enumString)).append("\n");
+    sb.append("    enumStringRequired: ").append(toIndentedString(enumStringRequired)).append("\n");
+    sb.append("    enumInteger: ").append(toIndentedString(enumInteger)).append("\n");
+    sb.append("    enumNumber: ").append(toIndentedString(enumNumber)).append("\n");
+    sb.append("    outerEnum: ").append(toIndentedString(outerEnum)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/FileSchemaTestClass.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/FileSchemaTestClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d1e9ca8495cde97f9cc2a350fbe63c78738934b
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/FileSchemaTestClass.java
@@ -0,0 +1,121 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * FileSchemaTestClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FileSchemaTestClass   {
+  @JsonProperty("file")
+  private java.io.File file;
+
+  @JsonProperty("files")
+  @Valid
+  private List<java.io.File> files = null;
+
+  public FileSchemaTestClass file(java.io.File file) {
+    this.file = file;
+    return this;
+  }
+
+  /**
+   * Get file
+   * @return file
+  */
+  @Schema(name = "file", defaultValue = "")
+
+  @Valid
+
+  public java.io.File getFile() {
+    return file;
+  }
+
+  public void setFile(java.io.File file) {
+    this.file = file;
+  }
+
+  public FileSchemaTestClass files(List<java.io.File> files) {
+    this.files = files;
+    return this;
+  }
+
+  public FileSchemaTestClass addFilesItem(java.io.File filesItem) {
+    if (this.files == null) {
+      this.files = new ArrayList<>();
+    }
+    this.files.add(filesItem);
+    return this;
+  }
+
+  /**
+   * Get files
+   * @return files
+  */
+  @Schema(name = "files", defaultValue = "")
+
+  @Valid
+
+  public List<java.io.File> getFiles() {
+    return files;
+  }
+
+  public void setFiles(List<java.io.File> files) {
+    this.files = files;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    FileSchemaTestClass fileSchemaTestClass = (FileSchemaTestClass) o;
+    return Objects.equals(this.file, fileSchemaTestClass.file) &&
+        Objects.equals(this.files, fileSchemaTestClass.files);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(file, files);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class FileSchemaTestClass {\n");
+    
+    sb.append("    file: ").append(toIndentedString(file)).append("\n");
+    sb.append("    files: ").append(toIndentedString(files)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/FormatTest.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/FormatTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..6546370cd329ce02e7c034b5e3defbe1db6bde12
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/FormatTest.java
@@ -0,0 +1,435 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.util.Arrays;
+import java.util.UUID;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * FormatTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FormatTest   {
+  @JsonProperty("integer")
+  private Integer integer;
+
+  @JsonProperty("int32")
+  private Integer int32;
+
+  @JsonProperty("int64")
+  private Long int64;
+
+  @JsonProperty("number")
+  private BigDecimal number;
+
+  @JsonProperty("float")
+  private Float _float;
+
+  @JsonProperty("double")
+  private Double _double;
+
+  @JsonProperty("string")
+  private String string;
+
+  @JsonProperty("byte")
+  private byte[] _byte;
+
+  @JsonProperty("binary")
+  private org.springframework.core.io.Resource binary;
+
+  @JsonProperty("date")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE)
+  private LocalDate date;
+
+  @JsonProperty("dateTime")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime dateTime;
+
+  @JsonProperty("uuid")
+  private UUID uuid;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("BigDecimal")
+  private BigDecimal bigDecimal;
+
+  public FormatTest integer(Integer integer) {
+    this.integer = integer;
+    return this;
+  }
+
+  /**
+   * Get integer
+   * minimum: 10
+   * maximum: 100
+   * @return integer
+  */
+  @Schema(name = "integer", defaultValue = "")
+
+@Min(10) @Max(100) 
+  public Integer getInteger() {
+    return integer;
+  }
+
+  public void setInteger(Integer integer) {
+    this.integer = integer;
+  }
+
+  public FormatTest int32(Integer int32) {
+    this.int32 = int32;
+    return this;
+  }
+
+  /**
+   * Get int32
+   * minimum: 20
+   * maximum: 200
+   * @return int32
+  */
+  @Schema(name = "int32", defaultValue = "")
+
+@Min(20) @Max(200) 
+  public Integer getInt32() {
+    return int32;
+  }
+
+  public void setInt32(Integer int32) {
+    this.int32 = int32;
+  }
+
+  public FormatTest int64(Long int64) {
+    this.int64 = int64;
+    return this;
+  }
+
+  /**
+   * Get int64
+   * @return int64
+  */
+  @Schema(name = "int64", defaultValue = "")
+
+
+  public Long getInt64() {
+    return int64;
+  }
+
+  public void setInt64(Long int64) {
+    this.int64 = int64;
+  }
+
+  public FormatTest number(BigDecimal number) {
+    this.number = number;
+    return this;
+  }
+
+  /**
+   * Get number
+   * minimum: 32.1
+   * maximum: 543.2
+   * @return number
+  */
+  @Schema(name = "number", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+@DecimalMin("32.1") @DecimalMax("543.2") 
+  public BigDecimal getNumber() {
+    return number;
+  }
+
+  public void setNumber(BigDecimal number) {
+    this.number = number;
+  }
+
+  public FormatTest _float(Float _float) {
+    this._float = _float;
+    return this;
+  }
+
+  /**
+   * Get _float
+   * minimum: 54.3
+   * maximum: 987.6
+   * @return _float
+  */
+  @Schema(name = "_float", defaultValue = "")
+
+@DecimalMin("54.3") @DecimalMax("987.6") 
+  public Float getFloat() {
+    return _float;
+  }
+
+  public void setFloat(Float _float) {
+    this._float = _float;
+  }
+
+  public FormatTest _double(Double _double) {
+    this._double = _double;
+    return this;
+  }
+
+  /**
+   * Get _double
+   * minimum: 67.8
+   * maximum: 123.4
+   * @return _double
+  */
+  @Schema(name = "_double", defaultValue = "")
+
+@DecimalMin("67.8") @DecimalMax("123.4") 
+  public Double getDouble() {
+    return _double;
+  }
+
+  public void setDouble(Double _double) {
+    this._double = _double;
+  }
+
+  public FormatTest string(String string) {
+    this.string = string;
+    return this;
+  }
+
+  /**
+   * Get string
+   * @return string
+  */
+  @Schema(name = "string", defaultValue = "")
+
+@Pattern(regexp = "/[a-z]/i") 
+  public String getString() {
+    return string;
+  }
+
+  public void setString(String string) {
+    this.string = string;
+  }
+
+  public FormatTest _byte(byte[] _byte) {
+    this._byte = _byte;
+    return this;
+  }
+
+  /**
+   * Get _byte
+   * @return _byte
+  */
+  @Schema(name = "_byte", required = true, defaultValue = "")
+  @NotNull
+
+
+  public byte[] getByte() {
+    return _byte;
+  }
+
+  public void setByte(byte[] _byte) {
+    this._byte = _byte;
+  }
+
+  public FormatTest binary(org.springframework.core.io.Resource binary) {
+    this.binary = binary;
+    return this;
+  }
+
+  /**
+   * Get binary
+   * @return binary
+  */
+  @Schema(name = "binary", defaultValue = "")
+
+  @Valid
+
+  public org.springframework.core.io.Resource getBinary() {
+    return binary;
+  }
+
+  public void setBinary(org.springframework.core.io.Resource binary) {
+    this.binary = binary;
+  }
+
+  public FormatTest date(LocalDate date) {
+    this.date = date;
+    return this;
+  }
+
+  /**
+   * Get date
+   * @return date
+  */
+  @Schema(name = "date", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public LocalDate getDate() {
+    return date;
+  }
+
+  public void setDate(LocalDate date) {
+    this.date = date;
+  }
+
+  public FormatTest dateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+    return this;
+  }
+
+  /**
+   * Get dateTime
+   * @return dateTime
+  */
+  @Schema(name = "dateTime", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getDateTime() {
+    return dateTime;
+  }
+
+  public void setDateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+  }
+
+  public FormatTest uuid(UUID uuid) {
+    this.uuid = uuid;
+    return this;
+  }
+
+  /**
+   * Get uuid
+   * @return uuid
+  */
+  @Schema(name = "uuid", example = "72f98069-206d-4f12-9f12-3d1e525a8e84", defaultValue = "")
+
+  @Valid
+
+  public UUID getUuid() {
+    return uuid;
+  }
+
+  public void setUuid(UUID uuid) {
+    this.uuid = uuid;
+  }
+
+  public FormatTest password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", required = true, defaultValue = "")
+  @NotNull
+
+@Size(min = 10, max = 64) 
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public FormatTest bigDecimal(BigDecimal bigDecimal) {
+    this.bigDecimal = bigDecimal;
+    return this;
+  }
+
+  /**
+   * Get bigDecimal
+   * @return bigDecimal
+  */
+  @Schema(name = "bigDecimal", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getBigDecimal() {
+    return bigDecimal;
+  }
+
+  public void setBigDecimal(BigDecimal bigDecimal) {
+    this.bigDecimal = bigDecimal;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    FormatTest formatTest = (FormatTest) o;
+    return Objects.equals(this.integer, formatTest.integer) &&
+        Objects.equals(this.int32, formatTest.int32) &&
+        Objects.equals(this.int64, formatTest.int64) &&
+        Objects.equals(this.number, formatTest.number) &&
+        Objects.equals(this._float, formatTest._float) &&
+        Objects.equals(this._double, formatTest._double) &&
+        Objects.equals(this.string, formatTest.string) &&
+        Arrays.equals(this._byte, formatTest._byte) &&
+        Objects.equals(this.binary, formatTest.binary) &&
+        Objects.equals(this.date, formatTest.date) &&
+        Objects.equals(this.dateTime, formatTest.dateTime) &&
+        Objects.equals(this.uuid, formatTest.uuid) &&
+        Objects.equals(this.password, formatTest.password) &&
+        Objects.equals(this.bigDecimal, formatTest.bigDecimal);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(integer, int32, int64, number, _float, _double, string, Arrays.hashCode(_byte), binary, date, dateTime, uuid, password, bigDecimal);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class FormatTest {\n");
+    
+    sb.append("    integer: ").append(toIndentedString(integer)).append("\n");
+    sb.append("    int32: ").append(toIndentedString(int32)).append("\n");
+    sb.append("    int64: ").append(toIndentedString(int64)).append("\n");
+    sb.append("    number: ").append(toIndentedString(number)).append("\n");
+    sb.append("    _float: ").append(toIndentedString(_float)).append("\n");
+    sb.append("    _double: ").append(toIndentedString(_double)).append("\n");
+    sb.append("    string: ").append(toIndentedString(string)).append("\n");
+    sb.append("    _byte: ").append(toIndentedString(_byte)).append("\n");
+    sb.append("    binary: ").append(toIndentedString(binary)).append("\n");
+    sb.append("    date: ").append(toIndentedString(date)).append("\n");
+    sb.append("    dateTime: ").append(toIndentedString(dateTime)).append("\n");
+    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    bigDecimal: ").append(toIndentedString(bigDecimal)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfb615a529fcf851112e0d03ebdda2b88636dd2e
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * HasOnlyReadOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class HasOnlyReadOnly   {
+  @JsonProperty("bar")
+  private String bar;
+
+  @JsonProperty("foo")
+  private String foo;
+
+  public HasOnlyReadOnly bar(String bar) {
+    this.bar = bar;
+    return this;
+  }
+
+  /**
+   * Get bar
+   * @return bar
+  */
+  @Schema(name = "bar", readOnly = true, defaultValue = "")
+
+
+  public String getBar() {
+    return bar;
+  }
+
+  public void setBar(String bar) {
+    this.bar = bar;
+  }
+
+  public HasOnlyReadOnly foo(String foo) {
+    this.foo = foo;
+    return this;
+  }
+
+  /**
+   * Get foo
+   * @return foo
+  */
+  @Schema(name = "foo", readOnly = true, defaultValue = "")
+
+
+  public String getFoo() {
+    return foo;
+  }
+
+  public void setFoo(String foo) {
+    this.foo = foo;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    HasOnlyReadOnly hasOnlyReadOnly = (HasOnlyReadOnly) o;
+    return Objects.equals(this.bar, hasOnlyReadOnly.bar) &&
+        Objects.equals(this.foo, hasOnlyReadOnly.foo);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(bar, foo);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class HasOnlyReadOnly {\n");
+    
+    sb.append("    bar: ").append(toIndentedString(bar)).append("\n");
+    sb.append("    foo: ").append(toIndentedString(foo)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/MapTest.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/MapTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ff73062758f04ef937017393c488750cc744270
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/MapTest.java
@@ -0,0 +1,234 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * MapTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MapTest   {
+  @JsonProperty("map_map_of_string")
+  @Valid
+  private Map<String, Map<String, String>> mapMapOfString = null;
+
+  /**
+   * Gets or Sets inner
+   */
+  public enum InnerEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower");
+
+    private String value;
+
+    InnerEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static InnerEnum fromValue(String value) {
+      for (InnerEnum b : InnerEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("map_of_enum_string")
+  @Valid
+  private Map<String, InnerEnum> mapOfEnumString = null;
+
+  @JsonProperty("direct_map")
+  @Valid
+  private Map<String, Boolean> directMap = null;
+
+  @JsonProperty("indirect_map")
+  @Valid
+  private Map<String, Boolean> indirectMap = null;
+
+  public MapTest mapMapOfString(Map<String, Map<String, String>> mapMapOfString) {
+    this.mapMapOfString = mapMapOfString;
+    return this;
+  }
+
+  public MapTest putMapMapOfStringItem(String key, Map<String, String> mapMapOfStringItem) {
+    if (this.mapMapOfString == null) {
+      this.mapMapOfString = new HashMap<>();
+    }
+    this.mapMapOfString.put(key, mapMapOfStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapOfString
+   * @return mapMapOfString
+  */
+  @Schema(name = "mapMapOfString", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, String>> getMapMapOfString() {
+    return mapMapOfString;
+  }
+
+  public void setMapMapOfString(Map<String, Map<String, String>> mapMapOfString) {
+    this.mapMapOfString = mapMapOfString;
+  }
+
+  public MapTest mapOfEnumString(Map<String, InnerEnum> mapOfEnumString) {
+    this.mapOfEnumString = mapOfEnumString;
+    return this;
+  }
+
+  public MapTest putMapOfEnumStringItem(String key, InnerEnum mapOfEnumStringItem) {
+    if (this.mapOfEnumString == null) {
+      this.mapOfEnumString = new HashMap<>();
+    }
+    this.mapOfEnumString.put(key, mapOfEnumStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapOfEnumString
+   * @return mapOfEnumString
+  */
+  @Schema(name = "mapOfEnumString", defaultValue = "")
+
+
+  public Map<String, InnerEnum> getMapOfEnumString() {
+    return mapOfEnumString;
+  }
+
+  public void setMapOfEnumString(Map<String, InnerEnum> mapOfEnumString) {
+    this.mapOfEnumString = mapOfEnumString;
+  }
+
+  public MapTest directMap(Map<String, Boolean> directMap) {
+    this.directMap = directMap;
+    return this;
+  }
+
+  public MapTest putDirectMapItem(String key, Boolean directMapItem) {
+    if (this.directMap == null) {
+      this.directMap = new HashMap<>();
+    }
+    this.directMap.put(key, directMapItem);
+    return this;
+  }
+
+  /**
+   * Get directMap
+   * @return directMap
+  */
+  @Schema(name = "directMap", defaultValue = "")
+
+
+  public Map<String, Boolean> getDirectMap() {
+    return directMap;
+  }
+
+  public void setDirectMap(Map<String, Boolean> directMap) {
+    this.directMap = directMap;
+  }
+
+  public MapTest indirectMap(Map<String, Boolean> indirectMap) {
+    this.indirectMap = indirectMap;
+    return this;
+  }
+
+  public MapTest putIndirectMapItem(String key, Boolean indirectMapItem) {
+    if (this.indirectMap == null) {
+      this.indirectMap = new HashMap<>();
+    }
+    this.indirectMap.put(key, indirectMapItem);
+    return this;
+  }
+
+  /**
+   * Get indirectMap
+   * @return indirectMap
+  */
+  @Schema(name = "indirectMap", defaultValue = "")
+
+
+  public Map<String, Boolean> getIndirectMap() {
+    return indirectMap;
+  }
+
+  public void setIndirectMap(Map<String, Boolean> indirectMap) {
+    this.indirectMap = indirectMap;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MapTest mapTest = (MapTest) o;
+    return Objects.equals(this.mapMapOfString, mapTest.mapMapOfString) &&
+        Objects.equals(this.mapOfEnumString, mapTest.mapOfEnumString) &&
+        Objects.equals(this.directMap, mapTest.directMap) &&
+        Objects.equals(this.indirectMap, mapTest.indirectMap);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(mapMapOfString, mapOfEnumString, directMap, indirectMap);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MapTest {\n");
+    
+    sb.append("    mapMapOfString: ").append(toIndentedString(mapMapOfString)).append("\n");
+    sb.append("    mapOfEnumString: ").append(toIndentedString(mapOfEnumString)).append("\n");
+    sb.append("    directMap: ").append(toIndentedString(directMap)).append("\n");
+    sb.append("    indirectMap: ").append(toIndentedString(indirectMap)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..03a7be43cc4a606ba8a493c1868c6d25eb1bfdd9
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
@@ -0,0 +1,152 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.time.OffsetDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.openapitools.model.Animal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * MixedPropertiesAndAdditionalPropertiesClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MixedPropertiesAndAdditionalPropertiesClass   {
+  @JsonProperty("uuid")
+  private UUID uuid;
+
+  @JsonProperty("dateTime")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime dateTime;
+
+  @JsonProperty("map")
+  @Valid
+  private Map<String, Animal> map = null;
+
+  public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) {
+    this.uuid = uuid;
+    return this;
+  }
+
+  /**
+   * Get uuid
+   * @return uuid
+  */
+  @Schema(name = "uuid", defaultValue = "")
+
+  @Valid
+
+  public UUID getUuid() {
+    return uuid;
+  }
+
+  public void setUuid(UUID uuid) {
+    this.uuid = uuid;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass dateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+    return this;
+  }
+
+  /**
+   * Get dateTime
+   * @return dateTime
+  */
+  @Schema(name = "dateTime", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getDateTime() {
+    return dateTime;
+  }
+
+  public void setDateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass map(Map<String, Animal> map) {
+    this.map = map;
+    return this;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal mapItem) {
+    if (this.map == null) {
+      this.map = new HashMap<>();
+    }
+    this.map.put(key, mapItem);
+    return this;
+  }
+
+  /**
+   * Get map
+   * @return map
+  */
+  @Schema(name = "map", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Animal> getMap() {
+    return map;
+  }
+
+  public void setMap(Map<String, Animal> map) {
+    this.map = map;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MixedPropertiesAndAdditionalPropertiesClass mixedPropertiesAndAdditionalPropertiesClass = (MixedPropertiesAndAdditionalPropertiesClass) o;
+    return Objects.equals(this.uuid, mixedPropertiesAndAdditionalPropertiesClass.uuid) &&
+        Objects.equals(this.dateTime, mixedPropertiesAndAdditionalPropertiesClass.dateTime) &&
+        Objects.equals(this.map, mixedPropertiesAndAdditionalPropertiesClass.map);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(uuid, dateTime, map);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MixedPropertiesAndAdditionalPropertiesClass {\n");
+    
+    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
+    sb.append("    dateTime: ").append(toIndentedString(dateTime)).append("\n");
+    sb.append("    map: ").append(toIndentedString(map)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Model200Response.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Model200Response.java
new file mode 100644
index 0000000000000000000000000000000000000000..77bf91649b08bc0b9401643f4a917f1c44ee5aef
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Model200Response.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model name starting with number
+ */
+@Schema(name = "200_response",description = "Model for testing model name starting with number")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Model200Response   {
+  @JsonProperty("name")
+  private Integer name;
+
+  @JsonProperty("class")
+  private String propertyClass;
+
+  public Model200Response name(Integer name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public Integer getName() {
+    return name;
+  }
+
+  public void setName(Integer name) {
+    this.name = name;
+  }
+
+  public Model200Response propertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+    return this;
+  }
+
+  /**
+   * Get propertyClass
+   * @return propertyClass
+  */
+  @Schema(name = "propertyClass", defaultValue = "")
+
+
+  public String getPropertyClass() {
+    return propertyClass;
+  }
+
+  public void setPropertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Model200Response _200response = (Model200Response) o;
+    return Objects.equals(this.name, _200response.name) &&
+        Objects.equals(this.propertyClass, _200response.propertyClass);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, propertyClass);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Model200Response {\n");
+    
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    propertyClass: ").append(toIndentedString(propertyClass)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ModelApiResponse.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ModelApiResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..2443600df226840aa8f7adc54617d4cca257329d
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ModelApiResponse.java
@@ -0,0 +1,133 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ModelApiResponse
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelApiResponse   {
+  @JsonProperty("code")
+  private Integer code;
+
+  @JsonProperty("type")
+  private String type;
+
+  @JsonProperty("message")
+  private String message;
+
+  public ModelApiResponse code(Integer code) {
+    this.code = code;
+    return this;
+  }
+
+  /**
+   * Get code
+   * @return code
+  */
+  @Schema(name = "code", defaultValue = "")
+
+
+  public Integer getCode() {
+    return code;
+  }
+
+  public void setCode(Integer code) {
+    this.code = code;
+  }
+
+  public ModelApiResponse type(String type) {
+    this.type = type;
+    return this;
+  }
+
+  /**
+   * Get type
+   * @return type
+  */
+  @Schema(name = "type", defaultValue = "")
+
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public ModelApiResponse message(String message) {
+    this.message = message;
+    return this;
+  }
+
+  /**
+   * Get message
+   * @return message
+  */
+  @Schema(name = "message", defaultValue = "")
+
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelApiResponse _apiResponse = (ModelApiResponse) o;
+    return Objects.equals(this.code, _apiResponse.code) &&
+        Objects.equals(this.type, _apiResponse.type) &&
+        Objects.equals(this.message, _apiResponse.message);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(code, type, message);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelApiResponse {\n");
+    
+    sb.append("    code: ").append(toIndentedString(code)).append("\n");
+    sb.append("    type: ").append(toIndentedString(type)).append("\n");
+    sb.append("    message: ").append(toIndentedString(message)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ModelReturn.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ModelReturn.java
new file mode 100644
index 0000000000000000000000000000000000000000..0301a47e9f3e7c7f7c18f5cdfdcbe916c12fd340
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ModelReturn.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing reserved words
+ */
+@Schema(name = "Return",description = "Model for testing reserved words")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelReturn   {
+  @JsonProperty("return")
+  private Integer _return;
+
+  public ModelReturn _return(Integer _return) {
+    this._return = _return;
+    return this;
+  }
+
+  /**
+   * Get _return
+   * @return _return
+  */
+  @Schema(name = "_return", defaultValue = "")
+
+
+  public Integer getReturn() {
+    return _return;
+  }
+
+  public void setReturn(Integer _return) {
+    this._return = _return;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelReturn _return = (ModelReturn) o;
+    return Objects.equals(this._return, _return._return);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(_return);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelReturn {\n");
+    
+    sb.append("    _return: ").append(toIndentedString(_return)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Name.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Name.java
new file mode 100644
index 0000000000000000000000000000000000000000..62a16f80ee07ade8aaa8159110929935a3b8d6e0
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Name.java
@@ -0,0 +1,160 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model name same as property name
+ */
+@Schema(name = "Name",description = "Model for testing model name same as property name")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Name   {
+  @JsonProperty("name")
+  private Integer name;
+
+  @JsonProperty("snake_case")
+  private Integer snakeCase;
+
+  @JsonProperty("property")
+  private String property;
+
+  @JsonProperty("123Number")
+  private Integer _123number;
+
+  public Name name(Integer name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getName() {
+    return name;
+  }
+
+  public void setName(Integer name) {
+    this.name = name;
+  }
+
+  public Name snakeCase(Integer snakeCase) {
+    this.snakeCase = snakeCase;
+    return this;
+  }
+
+  /**
+   * Get snakeCase
+   * @return snakeCase
+  */
+  @Schema(name = "snakeCase", readOnly = true, defaultValue = "")
+
+
+  public Integer getSnakeCase() {
+    return snakeCase;
+  }
+
+  public void setSnakeCase(Integer snakeCase) {
+    this.snakeCase = snakeCase;
+  }
+
+  public Name property(String property) {
+    this.property = property;
+    return this;
+  }
+
+  /**
+   * Get property
+   * @return property
+  */
+  @Schema(name = "property", defaultValue = "")
+
+
+  public String getProperty() {
+    return property;
+  }
+
+  public void setProperty(String property) {
+    this.property = property;
+  }
+
+  public Name _123number(Integer _123number) {
+    this._123number = _123number;
+    return this;
+  }
+
+  /**
+   * Get _123number
+   * @return _123number
+  */
+  @Schema(name = "_123number", readOnly = true, defaultValue = "")
+
+
+  public Integer get123number() {
+    return _123number;
+  }
+
+  public void set123number(Integer _123number) {
+    this._123number = _123number;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Name name = (Name) o;
+    return Objects.equals(this.name, name.name) &&
+        Objects.equals(this.snakeCase, name.snakeCase) &&
+        Objects.equals(this.property, name.property) &&
+        Objects.equals(this._123number, name._123number);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, snakeCase, property, _123number);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Name {\n");
+    
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    snakeCase: ").append(toIndentedString(snakeCase)).append("\n");
+    sb.append("    property: ").append(toIndentedString(property)).append("\n");
+    sb.append("    _123number: ").append(toIndentedString(_123number)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/NumberOnly.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/NumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..521fad80d5a722f8bd3eb3072d330aa63ae083a3
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/NumberOnly.java
@@ -0,0 +1,85 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * NumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class NumberOnly   {
+  @JsonProperty("JustNumber")
+  private BigDecimal justNumber;
+
+  public NumberOnly justNumber(BigDecimal justNumber) {
+    this.justNumber = justNumber;
+    return this;
+  }
+
+  /**
+   * Get justNumber
+   * @return justNumber
+  */
+  @Schema(name = "justNumber", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getJustNumber() {
+    return justNumber;
+  }
+
+  public void setJustNumber(BigDecimal justNumber) {
+    this.justNumber = justNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    NumberOnly numberOnly = (NumberOnly) o;
+    return Objects.equals(this.justNumber, numberOnly.justNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(justNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class NumberOnly {\n");
+    
+    sb.append("    justNumber: ").append(toIndentedString(justNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Order.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Order.java
new file mode 100644
index 0000000000000000000000000000000000000000..05071bdfe2bf754e2c7b8a18163b19c502908aff
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Order.java
@@ -0,0 +1,249 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.time.OffsetDateTime;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Order
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Order   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("petId")
+  private Long petId;
+
+  @JsonProperty("quantity")
+  private Integer quantity;
+
+  @JsonProperty("shipDate")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime shipDate;
+
+  /**
+   * Order Status
+   */
+  public enum StatusEnum {
+    PLACED("placed"),
+    
+    APPROVED("approved"),
+    
+    DELIVERED("delivered");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  @JsonProperty("complete")
+  private Boolean complete = false;
+
+  public Order id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Order petId(Long petId) {
+    this.petId = petId;
+    return this;
+  }
+
+  /**
+   * Get petId
+   * @return petId
+  */
+  @Schema(name = "petId", defaultValue = "")
+
+
+  public Long getPetId() {
+    return petId;
+  }
+
+  public void setPetId(Long petId) {
+    this.petId = petId;
+  }
+
+  public Order quantity(Integer quantity) {
+    this.quantity = quantity;
+    return this;
+  }
+
+  /**
+   * Get quantity
+   * @return quantity
+  */
+  @Schema(name = "quantity", defaultValue = "")
+
+
+  public Integer getQuantity() {
+    return quantity;
+  }
+
+  public void setQuantity(Integer quantity) {
+    this.quantity = quantity;
+  }
+
+  public Order shipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+    return this;
+  }
+
+  /**
+   * Get shipDate
+   * @return shipDate
+  */
+  @Schema(name = "shipDate", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getShipDate() {
+    return shipDate;
+  }
+
+  public void setShipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+  }
+
+  public Order status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Order Status
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "Order Status")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+  public Order complete(Boolean complete) {
+    this.complete = complete;
+    return this;
+  }
+
+  /**
+   * Get complete
+   * @return complete
+  */
+  @Schema(name = "complete", defaultValue = "")
+
+
+  public Boolean getComplete() {
+    return complete;
+  }
+
+  public void setComplete(Boolean complete) {
+    this.complete = complete;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Order order = (Order) o;
+    return Objects.equals(this.id, order.id) &&
+        Objects.equals(this.petId, order.petId) &&
+        Objects.equals(this.quantity, order.quantity) &&
+        Objects.equals(this.shipDate, order.shipDate) &&
+        Objects.equals(this.status, order.status) &&
+        Objects.equals(this.complete, order.complete);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, petId, quantity, shipDate, status, complete);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Order {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    petId: ").append(toIndentedString(petId)).append("\n");
+    sb.append("    quantity: ").append(toIndentedString(quantity)).append("\n");
+    sb.append("    shipDate: ").append(toIndentedString(shipDate)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    complete: ").append(toIndentedString(complete)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/OuterComposite.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/OuterComposite.java
new file mode 100644
index 0000000000000000000000000000000000000000..a721a3dde6a085844d35e03e0dfcf67a5febf507
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/OuterComposite.java
@@ -0,0 +1,135 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * OuterComposite
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class OuterComposite   {
+  @JsonProperty("my_number")
+  private BigDecimal myNumber;
+
+  @JsonProperty("my_string")
+  private String myString;
+
+  @JsonProperty("my_boolean")
+  private Boolean myBoolean;
+
+  public OuterComposite myNumber(BigDecimal myNumber) {
+    this.myNumber = myNumber;
+    return this;
+  }
+
+  /**
+   * Get myNumber
+   * @return myNumber
+  */
+  @Schema(name = "myNumber", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getMyNumber() {
+    return myNumber;
+  }
+
+  public void setMyNumber(BigDecimal myNumber) {
+    this.myNumber = myNumber;
+  }
+
+  public OuterComposite myString(String myString) {
+    this.myString = myString;
+    return this;
+  }
+
+  /**
+   * Get myString
+   * @return myString
+  */
+  @Schema(name = "myString", defaultValue = "")
+
+
+  public String getMyString() {
+    return myString;
+  }
+
+  public void setMyString(String myString) {
+    this.myString = myString;
+  }
+
+  public OuterComposite myBoolean(Boolean myBoolean) {
+    this.myBoolean = myBoolean;
+    return this;
+  }
+
+  /**
+   * Get myBoolean
+   * @return myBoolean
+  */
+  @Schema(name = "myBoolean", defaultValue = "")
+
+
+  public Boolean getMyBoolean() {
+    return myBoolean;
+  }
+
+  public void setMyBoolean(Boolean myBoolean) {
+    this.myBoolean = myBoolean;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    OuterComposite outerComposite = (OuterComposite) o;
+    return Objects.equals(this.myNumber, outerComposite.myNumber) &&
+        Objects.equals(this.myString, outerComposite.myString) &&
+        Objects.equals(this.myBoolean, outerComposite.myBoolean);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(myNumber, myString, myBoolean);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class OuterComposite {\n");
+    
+    sb.append("    myNumber: ").append(toIndentedString(myNumber)).append("\n");
+    sb.append("    myString: ").append(toIndentedString(myString)).append("\n");
+    sb.append("    myBoolean: ").append(toIndentedString(myBoolean)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/OuterEnum.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/OuterEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba0cca8a5e815e7cbeaade6896dd0e834ef7b4fe
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/OuterEnum.java
@@ -0,0 +1,55 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets OuterEnum
+ */
+public enum OuterEnum {
+  
+  PLACED("placed"),
+  
+  APPROVED("approved"),
+  
+  DELIVERED("delivered");
+
+  private String value;
+
+  OuterEnum(String value) {
+    this.value = value;
+  }
+
+  @JsonValue
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(value);
+  }
+
+  @JsonCreator
+  public static OuterEnum fromValue(String value) {
+    for (OuterEnum b : OuterEnum.values()) {
+      if (b.value.equals(value)) {
+        return b;
+      }
+    }
+    throw new IllegalArgumentException("Unexpected value '" + value + "'");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Pet.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Pet.java
new file mode 100644
index 0000000000000000000000000000000000000000..988eb317134d1171efe16791018e271e4bc1b30f
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Pet.java
@@ -0,0 +1,273 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import org.openapitools.model.Category;
+import org.openapitools.model.Tag;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Pet
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Pet   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("category")
+  private Category category;
+
+  @JsonProperty("name")
+  private String name;
+
+  @JsonProperty("photoUrls")
+  @Valid
+  private Set<String> photoUrls = new LinkedHashSet<>();
+
+  @JsonProperty("tags")
+  @Valid
+  private List<Tag> tags = null;
+
+  /**
+   * pet status in the store
+   */
+  public enum StatusEnum {
+    AVAILABLE("available"),
+    
+    PENDING("pending"),
+    
+    SOLD("sold");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  public Pet id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Pet category(Category category) {
+    this.category = category;
+    return this;
+  }
+
+  /**
+   * Get category
+   * @return category
+  */
+  @Schema(name = "category", defaultValue = "")
+
+  @Valid
+
+  public Category getCategory() {
+    return category;
+  }
+
+  public void setCategory(Category category) {
+    this.category = category;
+  }
+
+  public Pet name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", example = "doggie", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public Pet photoUrls(Set<String> photoUrls) {
+    this.photoUrls = photoUrls;
+    return this;
+  }
+
+  public Pet addPhotoUrlsItem(String photoUrlsItem) {
+    this.photoUrls.add(photoUrlsItem);
+    return this;
+  }
+
+  /**
+   * Get photoUrls
+   * @return photoUrls
+  */
+  @Schema(name = "photoUrls", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Set<String> getPhotoUrls() {
+    return photoUrls;
+  }
+
+  @JsonDeserialize(as = LinkedHashSet.class)
+  public void setPhotoUrls(Set<String> photoUrls) {
+    this.photoUrls = photoUrls;
+  }
+
+  public Pet tags(List<Tag> tags) {
+    this.tags = tags;
+    return this;
+  }
+
+  public Pet addTagsItem(Tag tagsItem) {
+    if (this.tags == null) {
+      this.tags = new ArrayList<>();
+    }
+    this.tags.add(tagsItem);
+    return this;
+  }
+
+  /**
+   * Get tags
+   * @return tags
+  */
+  @Schema(name = "tags", defaultValue = "")
+
+  @Valid
+
+  public List<Tag> getTags() {
+    return tags;
+  }
+
+  public void setTags(List<Tag> tags) {
+    this.tags = tags;
+  }
+
+  public Pet status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * pet status in the store
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "pet status in the store")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Pet pet = (Pet) o;
+    return Objects.equals(this.id, pet.id) &&
+        Objects.equals(this.category, pet.category) &&
+        Objects.equals(this.name, pet.name) &&
+        Objects.equals(this.photoUrls, pet.photoUrls) &&
+        Objects.equals(this.tags, pet.tags) &&
+        Objects.equals(this.status, pet.status);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, category, name, photoUrls, tags, status);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Pet {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    category: ").append(toIndentedString(category)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    photoUrls: ").append(toIndentedString(photoUrls)).append("\n");
+    sb.append("    tags: ").append(toIndentedString(tags)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ReadOnlyFirst.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ReadOnlyFirst.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c51770a8e662dd5d57de2c19f502e9d536db08a
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/ReadOnlyFirst.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ReadOnlyFirst
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ReadOnlyFirst   {
+  @JsonProperty("bar")
+  private String bar;
+
+  @JsonProperty("baz")
+  private String baz;
+
+  public ReadOnlyFirst bar(String bar) {
+    this.bar = bar;
+    return this;
+  }
+
+  /**
+   * Get bar
+   * @return bar
+  */
+  @Schema(name = "bar", readOnly = true, defaultValue = "")
+
+
+  public String getBar() {
+    return bar;
+  }
+
+  public void setBar(String bar) {
+    this.bar = bar;
+  }
+
+  public ReadOnlyFirst baz(String baz) {
+    this.baz = baz;
+    return this;
+  }
+
+  /**
+   * Get baz
+   * @return baz
+  */
+  @Schema(name = "baz", defaultValue = "")
+
+
+  public String getBaz() {
+    return baz;
+  }
+
+  public void setBaz(String baz) {
+    this.baz = baz;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ReadOnlyFirst readOnlyFirst = (ReadOnlyFirst) o;
+    return Objects.equals(this.bar, readOnlyFirst.bar) &&
+        Objects.equals(this.baz, readOnlyFirst.baz);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(bar, baz);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ReadOnlyFirst {\n");
+    
+    sb.append("    bar: ").append(toIndentedString(bar)).append("\n");
+    sb.append("    baz: ").append(toIndentedString(baz)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/SpecialModelName.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/SpecialModelName.java
new file mode 100644
index 0000000000000000000000000000000000000000..75f4be4e9f8f067ae60abd1268d60347d2d95724
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/SpecialModelName.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * SpecialModelName
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class SpecialModelName   {
+  @JsonProperty("$special[property.name]")
+  private Long $specialPropertyName;
+
+  public SpecialModelName $specialPropertyName(Long $specialPropertyName) {
+    this.$specialPropertyName = $specialPropertyName;
+    return this;
+  }
+
+  /**
+   * Get $specialPropertyName
+   * @return $specialPropertyName
+  */
+  @Schema(name = "$specialPropertyName", defaultValue = "")
+
+
+  public Long get$SpecialPropertyName() {
+    return $specialPropertyName;
+  }
+
+  public void set$SpecialPropertyName(Long $specialPropertyName) {
+    this.$specialPropertyName = $specialPropertyName;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SpecialModelName $specialModelName = (SpecialModelName) o;
+    return Objects.equals(this.$specialPropertyName, $specialModelName.$specialPropertyName);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash($specialPropertyName);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SpecialModelName {\n");
+    
+    sb.append("    $specialPropertyName: ").append(toIndentedString($specialPropertyName)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Tag.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Tag.java
new file mode 100644
index 0000000000000000000000000000000000000000..8722df999bfc306ae4cdd20cb567d8dd9247ac02
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/Tag.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Tag
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Tag   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Tag id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Tag name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Tag tag = (Tag) o;
+    return Objects.equals(this.id, tag.id) &&
+        Objects.equals(this.name, tag.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Tag {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/TypeHolderDefault.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/TypeHolderDefault.java
new file mode 100644
index 0000000000000000000000000000000000000000..19e9bf310f769ea1e09ee1c959df0a77f3a10215
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/TypeHolderDefault.java
@@ -0,0 +1,198 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * TypeHolderDefault
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class TypeHolderDefault   {
+  @JsonProperty("string_item")
+  private String stringItem = "what";
+
+  @JsonProperty("number_item")
+  private BigDecimal numberItem;
+
+  @JsonProperty("integer_item")
+  private Integer integerItem;
+
+  @JsonProperty("bool_item")
+  private Boolean boolItem = true;
+
+  @JsonProperty("array_item")
+  @Valid
+  private List<Integer> arrayItem = new ArrayList<>();
+
+  public TypeHolderDefault stringItem(String stringItem) {
+    this.stringItem = stringItem;
+    return this;
+  }
+
+  /**
+   * Get stringItem
+   * @return stringItem
+  */
+  @Schema(name = "stringItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getStringItem() {
+    return stringItem;
+  }
+
+  public void setStringItem(String stringItem) {
+    this.stringItem = stringItem;
+  }
+
+  public TypeHolderDefault numberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+    return this;
+  }
+
+  /**
+   * Get numberItem
+   * @return numberItem
+  */
+  @Schema(name = "numberItem", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public BigDecimal getNumberItem() {
+    return numberItem;
+  }
+
+  public void setNumberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+  }
+
+  public TypeHolderDefault integerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+    return this;
+  }
+
+  /**
+   * Get integerItem
+   * @return integerItem
+  */
+  @Schema(name = "integerItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getIntegerItem() {
+    return integerItem;
+  }
+
+  public void setIntegerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+  }
+
+  public TypeHolderDefault boolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+    return this;
+  }
+
+  /**
+   * Get boolItem
+   * @return boolItem
+  */
+  @Schema(name = "boolItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Boolean getBoolItem() {
+    return boolItem;
+  }
+
+  public void setBoolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+  }
+
+  public TypeHolderDefault arrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+    return this;
+  }
+
+  public TypeHolderDefault addArrayItemItem(Integer arrayItemItem) {
+    this.arrayItem.add(arrayItemItem);
+    return this;
+  }
+
+  /**
+   * Get arrayItem
+   * @return arrayItem
+  */
+  @Schema(name = "arrayItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<Integer> getArrayItem() {
+    return arrayItem;
+  }
+
+  public void setArrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TypeHolderDefault typeHolderDefault = (TypeHolderDefault) o;
+    return Objects.equals(this.stringItem, typeHolderDefault.stringItem) &&
+        Objects.equals(this.numberItem, typeHolderDefault.numberItem) &&
+        Objects.equals(this.integerItem, typeHolderDefault.integerItem) &&
+        Objects.equals(this.boolItem, typeHolderDefault.boolItem) &&
+        Objects.equals(this.arrayItem, typeHolderDefault.arrayItem);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(stringItem, numberItem, integerItem, boolItem, arrayItem);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TypeHolderDefault {\n");
+    
+    sb.append("    stringItem: ").append(toIndentedString(stringItem)).append("\n");
+    sb.append("    numberItem: ").append(toIndentedString(numberItem)).append("\n");
+    sb.append("    integerItem: ").append(toIndentedString(integerItem)).append("\n");
+    sb.append("    boolItem: ").append(toIndentedString(boolItem)).append("\n");
+    sb.append("    arrayItem: ").append(toIndentedString(arrayItem)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/TypeHolderExample.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/TypeHolderExample.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9a3762bc74b482b1d24566ae6837fd1c4952a8f
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/TypeHolderExample.java
@@ -0,0 +1,224 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * TypeHolderExample
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class TypeHolderExample   {
+  @JsonProperty("string_item")
+  private String stringItem;
+
+  @JsonProperty("number_item")
+  private BigDecimal numberItem;
+
+  @JsonProperty("float_item")
+  private Float floatItem;
+
+  @JsonProperty("integer_item")
+  private Integer integerItem;
+
+  @JsonProperty("bool_item")
+  private Boolean boolItem;
+
+  @JsonProperty("array_item")
+  @Valid
+  private List<Integer> arrayItem = new ArrayList<>();
+
+  public TypeHolderExample stringItem(String stringItem) {
+    this.stringItem = stringItem;
+    return this;
+  }
+
+  /**
+   * Get stringItem
+   * @return stringItem
+  */
+  @Schema(name = "stringItem", example = "what", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getStringItem() {
+    return stringItem;
+  }
+
+  public void setStringItem(String stringItem) {
+    this.stringItem = stringItem;
+  }
+
+  public TypeHolderExample numberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+    return this;
+  }
+
+  /**
+   * Get numberItem
+   * @return numberItem
+  */
+  @Schema(name = "numberItem", example = "1.234", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public BigDecimal getNumberItem() {
+    return numberItem;
+  }
+
+  public void setNumberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+  }
+
+  public TypeHolderExample floatItem(Float floatItem) {
+    this.floatItem = floatItem;
+    return this;
+  }
+
+  /**
+   * Get floatItem
+   * @return floatItem
+  */
+  @Schema(name = "floatItem", example = "1.234", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Float getFloatItem() {
+    return floatItem;
+  }
+
+  public void setFloatItem(Float floatItem) {
+    this.floatItem = floatItem;
+  }
+
+  public TypeHolderExample integerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+    return this;
+  }
+
+  /**
+   * Get integerItem
+   * @return integerItem
+  */
+  @Schema(name = "integerItem", example = "-2", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getIntegerItem() {
+    return integerItem;
+  }
+
+  public void setIntegerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+  }
+
+  public TypeHolderExample boolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+    return this;
+  }
+
+  /**
+   * Get boolItem
+   * @return boolItem
+  */
+  @Schema(name = "boolItem", example = "true", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Boolean getBoolItem() {
+    return boolItem;
+  }
+
+  public void setBoolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+  }
+
+  public TypeHolderExample arrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+    return this;
+  }
+
+  public TypeHolderExample addArrayItemItem(Integer arrayItemItem) {
+    this.arrayItem.add(arrayItemItem);
+    return this;
+  }
+
+  /**
+   * Get arrayItem
+   * @return arrayItem
+  */
+  @Schema(name = "arrayItem", example = "[0, 1, 2, 3]", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<Integer> getArrayItem() {
+    return arrayItem;
+  }
+
+  public void setArrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TypeHolderExample typeHolderExample = (TypeHolderExample) o;
+    return Objects.equals(this.stringItem, typeHolderExample.stringItem) &&
+        Objects.equals(this.numberItem, typeHolderExample.numberItem) &&
+        Objects.equals(this.floatItem, typeHolderExample.floatItem) &&
+        Objects.equals(this.integerItem, typeHolderExample.integerItem) &&
+        Objects.equals(this.boolItem, typeHolderExample.boolItem) &&
+        Objects.equals(this.arrayItem, typeHolderExample.arrayItem);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(stringItem, numberItem, floatItem, integerItem, boolItem, arrayItem);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TypeHolderExample {\n");
+    
+    sb.append("    stringItem: ").append(toIndentedString(stringItem)).append("\n");
+    sb.append("    numberItem: ").append(toIndentedString(numberItem)).append("\n");
+    sb.append("    floatItem: ").append(toIndentedString(floatItem)).append("\n");
+    sb.append("    integerItem: ").append(toIndentedString(integerItem)).append("\n");
+    sb.append("    boolItem: ").append(toIndentedString(boolItem)).append("\n");
+    sb.append("    arrayItem: ").append(toIndentedString(arrayItem)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/User.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..83152a155535be4664d8a23d2cadc8f922021653
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/User.java
@@ -0,0 +1,258 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * User
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class User   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("username")
+  private String username;
+
+  @JsonProperty("firstName")
+  private String firstName;
+
+  @JsonProperty("lastName")
+  private String lastName;
+
+  @JsonProperty("email")
+  private String email;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("phone")
+  private String phone;
+
+  @JsonProperty("userStatus")
+  private Integer userStatus;
+
+  public User id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public User username(String username) {
+    this.username = username;
+    return this;
+  }
+
+  /**
+   * Get username
+   * @return username
+  */
+  @Schema(name = "username", defaultValue = "")
+
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public User firstName(String firstName) {
+    this.firstName = firstName;
+    return this;
+  }
+
+  /**
+   * Get firstName
+   * @return firstName
+  */
+  @Schema(name = "firstName", defaultValue = "")
+
+
+  public String getFirstName() {
+    return firstName;
+  }
+
+  public void setFirstName(String firstName) {
+    this.firstName = firstName;
+  }
+
+  public User lastName(String lastName) {
+    this.lastName = lastName;
+    return this;
+  }
+
+  /**
+   * Get lastName
+   * @return lastName
+  */
+  @Schema(name = "lastName", defaultValue = "")
+
+
+  public String getLastName() {
+    return lastName;
+  }
+
+  public void setLastName(String lastName) {
+    this.lastName = lastName;
+  }
+
+  public User email(String email) {
+    this.email = email;
+    return this;
+  }
+
+  /**
+   * Get email
+   * @return email
+  */
+  @Schema(name = "email", defaultValue = "")
+
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+  public User password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", defaultValue = "")
+
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public User phone(String phone) {
+    this.phone = phone;
+    return this;
+  }
+
+  /**
+   * Get phone
+   * @return phone
+  */
+  @Schema(name = "phone", defaultValue = "")
+
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public User userStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+    return this;
+  }
+
+  /**
+   * User Status
+   * @return userStatus
+  */
+  @Schema(name = "userStatus", defaultValue = "User Status")
+
+
+  public Integer getUserStatus() {
+    return userStatus;
+  }
+
+  public void setUserStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    User user = (User) o;
+    return Objects.equals(this.id, user.id) &&
+        Objects.equals(this.username, user.username) &&
+        Objects.equals(this.firstName, user.firstName) &&
+        Objects.equals(this.lastName, user.lastName) &&
+        Objects.equals(this.email, user.email) &&
+        Objects.equals(this.password, user.password) &&
+        Objects.equals(this.phone, user.phone) &&
+        Objects.equals(this.userStatus, user.userStatus);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class User {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    username: ").append(toIndentedString(username)).append("\n");
+    sb.append("    firstName: ").append(toIndentedString(firstName)).append("\n");
+    sb.append("    lastName: ").append(toIndentedString(lastName)).append("\n");
+    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    phone: ").append(toIndentedString(phone)).append("\n");
+    sb.append("    userStatus: ").append(toIndentedString(userStatus)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/XmlItem.java b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/XmlItem.java
new file mode 100644
index 0000000000000000000000000000000000000000..59a183db0f62d3228837978041ec6ba77949ce09
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-oas3-fakeapi/src/main/java/org/openapitools/model/XmlItem.java
@@ -0,0 +1,872 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * XmlItem
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class XmlItem   {
+  @JsonProperty("attribute_string")
+  private String attributeString;
+
+  @JsonProperty("attribute_number")
+  private BigDecimal attributeNumber;
+
+  @JsonProperty("attribute_integer")
+  private Integer attributeInteger;
+
+  @JsonProperty("attribute_boolean")
+  private Boolean attributeBoolean;
+
+  @JsonProperty("wrapped_array")
+  @Valid
+  private List<Integer> wrappedArray = null;
+
+  @JsonProperty("name_string")
+  private String nameString;
+
+  @JsonProperty("name_number")
+  private BigDecimal nameNumber;
+
+  @JsonProperty("name_integer")
+  private Integer nameInteger;
+
+  @JsonProperty("name_boolean")
+  private Boolean nameBoolean;
+
+  @JsonProperty("name_array")
+  @Valid
+  private List<Integer> nameArray = null;
+
+  @JsonProperty("name_wrapped_array")
+  @Valid
+  private List<Integer> nameWrappedArray = null;
+
+  @JsonProperty("prefix_string")
+  private String prefixString;
+
+  @JsonProperty("prefix_number")
+  private BigDecimal prefixNumber;
+
+  @JsonProperty("prefix_integer")
+  private Integer prefixInteger;
+
+  @JsonProperty("prefix_boolean")
+  private Boolean prefixBoolean;
+
+  @JsonProperty("prefix_array")
+  @Valid
+  private List<Integer> prefixArray = null;
+
+  @JsonProperty("prefix_wrapped_array")
+  @Valid
+  private List<Integer> prefixWrappedArray = null;
+
+  @JsonProperty("namespace_string")
+  private String namespaceString;
+
+  @JsonProperty("namespace_number")
+  private BigDecimal namespaceNumber;
+
+  @JsonProperty("namespace_integer")
+  private Integer namespaceInteger;
+
+  @JsonProperty("namespace_boolean")
+  private Boolean namespaceBoolean;
+
+  @JsonProperty("namespace_array")
+  @Valid
+  private List<Integer> namespaceArray = null;
+
+  @JsonProperty("namespace_wrapped_array")
+  @Valid
+  private List<Integer> namespaceWrappedArray = null;
+
+  @JsonProperty("prefix_ns_string")
+  private String prefixNsString;
+
+  @JsonProperty("prefix_ns_number")
+  private BigDecimal prefixNsNumber;
+
+  @JsonProperty("prefix_ns_integer")
+  private Integer prefixNsInteger;
+
+  @JsonProperty("prefix_ns_boolean")
+  private Boolean prefixNsBoolean;
+
+  @JsonProperty("prefix_ns_array")
+  @Valid
+  private List<Integer> prefixNsArray = null;
+
+  @JsonProperty("prefix_ns_wrapped_array")
+  @Valid
+  private List<Integer> prefixNsWrappedArray = null;
+
+  public XmlItem attributeString(String attributeString) {
+    this.attributeString = attributeString;
+    return this;
+  }
+
+  /**
+   * Get attributeString
+   * @return attributeString
+  */
+  @Schema(name = "attributeString", example = "string", defaultValue = "")
+
+
+  public String getAttributeString() {
+    return attributeString;
+  }
+
+  public void setAttributeString(String attributeString) {
+    this.attributeString = attributeString;
+  }
+
+  public XmlItem attributeNumber(BigDecimal attributeNumber) {
+    this.attributeNumber = attributeNumber;
+    return this;
+  }
+
+  /**
+   * Get attributeNumber
+   * @return attributeNumber
+  */
+  @Schema(name = "attributeNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getAttributeNumber() {
+    return attributeNumber;
+  }
+
+  public void setAttributeNumber(BigDecimal attributeNumber) {
+    this.attributeNumber = attributeNumber;
+  }
+
+  public XmlItem attributeInteger(Integer attributeInteger) {
+    this.attributeInteger = attributeInteger;
+    return this;
+  }
+
+  /**
+   * Get attributeInteger
+   * @return attributeInteger
+  */
+  @Schema(name = "attributeInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getAttributeInteger() {
+    return attributeInteger;
+  }
+
+  public void setAttributeInteger(Integer attributeInteger) {
+    this.attributeInteger = attributeInteger;
+  }
+
+  public XmlItem attributeBoolean(Boolean attributeBoolean) {
+    this.attributeBoolean = attributeBoolean;
+    return this;
+  }
+
+  /**
+   * Get attributeBoolean
+   * @return attributeBoolean
+  */
+  @Schema(name = "attributeBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getAttributeBoolean() {
+    return attributeBoolean;
+  }
+
+  public void setAttributeBoolean(Boolean attributeBoolean) {
+    this.attributeBoolean = attributeBoolean;
+  }
+
+  public XmlItem wrappedArray(List<Integer> wrappedArray) {
+    this.wrappedArray = wrappedArray;
+    return this;
+  }
+
+  public XmlItem addWrappedArrayItem(Integer wrappedArrayItem) {
+    if (this.wrappedArray == null) {
+      this.wrappedArray = new ArrayList<>();
+    }
+    this.wrappedArray.add(wrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get wrappedArray
+   * @return wrappedArray
+  */
+  @Schema(name = "wrappedArray", defaultValue = "")
+
+
+  public List<Integer> getWrappedArray() {
+    return wrappedArray;
+  }
+
+  public void setWrappedArray(List<Integer> wrappedArray) {
+    this.wrappedArray = wrappedArray;
+  }
+
+  public XmlItem nameString(String nameString) {
+    this.nameString = nameString;
+    return this;
+  }
+
+  /**
+   * Get nameString
+   * @return nameString
+  */
+  @Schema(name = "nameString", example = "string", defaultValue = "")
+
+
+  public String getNameString() {
+    return nameString;
+  }
+
+  public void setNameString(String nameString) {
+    this.nameString = nameString;
+  }
+
+  public XmlItem nameNumber(BigDecimal nameNumber) {
+    this.nameNumber = nameNumber;
+    return this;
+  }
+
+  /**
+   * Get nameNumber
+   * @return nameNumber
+  */
+  @Schema(name = "nameNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getNameNumber() {
+    return nameNumber;
+  }
+
+  public void setNameNumber(BigDecimal nameNumber) {
+    this.nameNumber = nameNumber;
+  }
+
+  public XmlItem nameInteger(Integer nameInteger) {
+    this.nameInteger = nameInteger;
+    return this;
+  }
+
+  /**
+   * Get nameInteger
+   * @return nameInteger
+  */
+  @Schema(name = "nameInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getNameInteger() {
+    return nameInteger;
+  }
+
+  public void setNameInteger(Integer nameInteger) {
+    this.nameInteger = nameInteger;
+  }
+
+  public XmlItem nameBoolean(Boolean nameBoolean) {
+    this.nameBoolean = nameBoolean;
+    return this;
+  }
+
+  /**
+   * Get nameBoolean
+   * @return nameBoolean
+  */
+  @Schema(name = "nameBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getNameBoolean() {
+    return nameBoolean;
+  }
+
+  public void setNameBoolean(Boolean nameBoolean) {
+    this.nameBoolean = nameBoolean;
+  }
+
+  public XmlItem nameArray(List<Integer> nameArray) {
+    this.nameArray = nameArray;
+    return this;
+  }
+
+  public XmlItem addNameArrayItem(Integer nameArrayItem) {
+    if (this.nameArray == null) {
+      this.nameArray = new ArrayList<>();
+    }
+    this.nameArray.add(nameArrayItem);
+    return this;
+  }
+
+  /**
+   * Get nameArray
+   * @return nameArray
+  */
+  @Schema(name = "nameArray", defaultValue = "")
+
+
+  public List<Integer> getNameArray() {
+    return nameArray;
+  }
+
+  public void setNameArray(List<Integer> nameArray) {
+    this.nameArray = nameArray;
+  }
+
+  public XmlItem nameWrappedArray(List<Integer> nameWrappedArray) {
+    this.nameWrappedArray = nameWrappedArray;
+    return this;
+  }
+
+  public XmlItem addNameWrappedArrayItem(Integer nameWrappedArrayItem) {
+    if (this.nameWrappedArray == null) {
+      this.nameWrappedArray = new ArrayList<>();
+    }
+    this.nameWrappedArray.add(nameWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get nameWrappedArray
+   * @return nameWrappedArray
+  */
+  @Schema(name = "nameWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getNameWrappedArray() {
+    return nameWrappedArray;
+  }
+
+  public void setNameWrappedArray(List<Integer> nameWrappedArray) {
+    this.nameWrappedArray = nameWrappedArray;
+  }
+
+  public XmlItem prefixString(String prefixString) {
+    this.prefixString = prefixString;
+    return this;
+  }
+
+  /**
+   * Get prefixString
+   * @return prefixString
+  */
+  @Schema(name = "prefixString", example = "string", defaultValue = "")
+
+
+  public String getPrefixString() {
+    return prefixString;
+  }
+
+  public void setPrefixString(String prefixString) {
+    this.prefixString = prefixString;
+  }
+
+  public XmlItem prefixNumber(BigDecimal prefixNumber) {
+    this.prefixNumber = prefixNumber;
+    return this;
+  }
+
+  /**
+   * Get prefixNumber
+   * @return prefixNumber
+  */
+  @Schema(name = "prefixNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getPrefixNumber() {
+    return prefixNumber;
+  }
+
+  public void setPrefixNumber(BigDecimal prefixNumber) {
+    this.prefixNumber = prefixNumber;
+  }
+
+  public XmlItem prefixInteger(Integer prefixInteger) {
+    this.prefixInteger = prefixInteger;
+    return this;
+  }
+
+  /**
+   * Get prefixInteger
+   * @return prefixInteger
+  */
+  @Schema(name = "prefixInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getPrefixInteger() {
+    return prefixInteger;
+  }
+
+  public void setPrefixInteger(Integer prefixInteger) {
+    this.prefixInteger = prefixInteger;
+  }
+
+  public XmlItem prefixBoolean(Boolean prefixBoolean) {
+    this.prefixBoolean = prefixBoolean;
+    return this;
+  }
+
+  /**
+   * Get prefixBoolean
+   * @return prefixBoolean
+  */
+  @Schema(name = "prefixBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getPrefixBoolean() {
+    return prefixBoolean;
+  }
+
+  public void setPrefixBoolean(Boolean prefixBoolean) {
+    this.prefixBoolean = prefixBoolean;
+  }
+
+  public XmlItem prefixArray(List<Integer> prefixArray) {
+    this.prefixArray = prefixArray;
+    return this;
+  }
+
+  public XmlItem addPrefixArrayItem(Integer prefixArrayItem) {
+    if (this.prefixArray == null) {
+      this.prefixArray = new ArrayList<>();
+    }
+    this.prefixArray.add(prefixArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixArray
+   * @return prefixArray
+  */
+  @Schema(name = "prefixArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixArray() {
+    return prefixArray;
+  }
+
+  public void setPrefixArray(List<Integer> prefixArray) {
+    this.prefixArray = prefixArray;
+  }
+
+  public XmlItem prefixWrappedArray(List<Integer> prefixWrappedArray) {
+    this.prefixWrappedArray = prefixWrappedArray;
+    return this;
+  }
+
+  public XmlItem addPrefixWrappedArrayItem(Integer prefixWrappedArrayItem) {
+    if (this.prefixWrappedArray == null) {
+      this.prefixWrappedArray = new ArrayList<>();
+    }
+    this.prefixWrappedArray.add(prefixWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixWrappedArray
+   * @return prefixWrappedArray
+  */
+  @Schema(name = "prefixWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixWrappedArray() {
+    return prefixWrappedArray;
+  }
+
+  public void setPrefixWrappedArray(List<Integer> prefixWrappedArray) {
+    this.prefixWrappedArray = prefixWrappedArray;
+  }
+
+  public XmlItem namespaceString(String namespaceString) {
+    this.namespaceString = namespaceString;
+    return this;
+  }
+
+  /**
+   * Get namespaceString
+   * @return namespaceString
+  */
+  @Schema(name = "namespaceString", example = "string", defaultValue = "")
+
+
+  public String getNamespaceString() {
+    return namespaceString;
+  }
+
+  public void setNamespaceString(String namespaceString) {
+    this.namespaceString = namespaceString;
+  }
+
+  public XmlItem namespaceNumber(BigDecimal namespaceNumber) {
+    this.namespaceNumber = namespaceNumber;
+    return this;
+  }
+
+  /**
+   * Get namespaceNumber
+   * @return namespaceNumber
+  */
+  @Schema(name = "namespaceNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getNamespaceNumber() {
+    return namespaceNumber;
+  }
+
+  public void setNamespaceNumber(BigDecimal namespaceNumber) {
+    this.namespaceNumber = namespaceNumber;
+  }
+
+  public XmlItem namespaceInteger(Integer namespaceInteger) {
+    this.namespaceInteger = namespaceInteger;
+    return this;
+  }
+
+  /**
+   * Get namespaceInteger
+   * @return namespaceInteger
+  */
+  @Schema(name = "namespaceInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getNamespaceInteger() {
+    return namespaceInteger;
+  }
+
+  public void setNamespaceInteger(Integer namespaceInteger) {
+    this.namespaceInteger = namespaceInteger;
+  }
+
+  public XmlItem namespaceBoolean(Boolean namespaceBoolean) {
+    this.namespaceBoolean = namespaceBoolean;
+    return this;
+  }
+
+  /**
+   * Get namespaceBoolean
+   * @return namespaceBoolean
+  */
+  @Schema(name = "namespaceBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getNamespaceBoolean() {
+    return namespaceBoolean;
+  }
+
+  public void setNamespaceBoolean(Boolean namespaceBoolean) {
+    this.namespaceBoolean = namespaceBoolean;
+  }
+
+  public XmlItem namespaceArray(List<Integer> namespaceArray) {
+    this.namespaceArray = namespaceArray;
+    return this;
+  }
+
+  public XmlItem addNamespaceArrayItem(Integer namespaceArrayItem) {
+    if (this.namespaceArray == null) {
+      this.namespaceArray = new ArrayList<>();
+    }
+    this.namespaceArray.add(namespaceArrayItem);
+    return this;
+  }
+
+  /**
+   * Get namespaceArray
+   * @return namespaceArray
+  */
+  @Schema(name = "namespaceArray", defaultValue = "")
+
+
+  public List<Integer> getNamespaceArray() {
+    return namespaceArray;
+  }
+
+  public void setNamespaceArray(List<Integer> namespaceArray) {
+    this.namespaceArray = namespaceArray;
+  }
+
+  public XmlItem namespaceWrappedArray(List<Integer> namespaceWrappedArray) {
+    this.namespaceWrappedArray = namespaceWrappedArray;
+    return this;
+  }
+
+  public XmlItem addNamespaceWrappedArrayItem(Integer namespaceWrappedArrayItem) {
+    if (this.namespaceWrappedArray == null) {
+      this.namespaceWrappedArray = new ArrayList<>();
+    }
+    this.namespaceWrappedArray.add(namespaceWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get namespaceWrappedArray
+   * @return namespaceWrappedArray
+  */
+  @Schema(name = "namespaceWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getNamespaceWrappedArray() {
+    return namespaceWrappedArray;
+  }
+
+  public void setNamespaceWrappedArray(List<Integer> namespaceWrappedArray) {
+    this.namespaceWrappedArray = namespaceWrappedArray;
+  }
+
+  public XmlItem prefixNsString(String prefixNsString) {
+    this.prefixNsString = prefixNsString;
+    return this;
+  }
+
+  /**
+   * Get prefixNsString
+   * @return prefixNsString
+  */
+  @Schema(name = "prefixNsString", example = "string", defaultValue = "")
+
+
+  public String getPrefixNsString() {
+    return prefixNsString;
+  }
+
+  public void setPrefixNsString(String prefixNsString) {
+    this.prefixNsString = prefixNsString;
+  }
+
+  public XmlItem prefixNsNumber(BigDecimal prefixNsNumber) {
+    this.prefixNsNumber = prefixNsNumber;
+    return this;
+  }
+
+  /**
+   * Get prefixNsNumber
+   * @return prefixNsNumber
+  */
+  @Schema(name = "prefixNsNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getPrefixNsNumber() {
+    return prefixNsNumber;
+  }
+
+  public void setPrefixNsNumber(BigDecimal prefixNsNumber) {
+    this.prefixNsNumber = prefixNsNumber;
+  }
+
+  public XmlItem prefixNsInteger(Integer prefixNsInteger) {
+    this.prefixNsInteger = prefixNsInteger;
+    return this;
+  }
+
+  /**
+   * Get prefixNsInteger
+   * @return prefixNsInteger
+  */
+  @Schema(name = "prefixNsInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getPrefixNsInteger() {
+    return prefixNsInteger;
+  }
+
+  public void setPrefixNsInteger(Integer prefixNsInteger) {
+    this.prefixNsInteger = prefixNsInteger;
+  }
+
+  public XmlItem prefixNsBoolean(Boolean prefixNsBoolean) {
+    this.prefixNsBoolean = prefixNsBoolean;
+    return this;
+  }
+
+  /**
+   * Get prefixNsBoolean
+   * @return prefixNsBoolean
+  */
+  @Schema(name = "prefixNsBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getPrefixNsBoolean() {
+    return prefixNsBoolean;
+  }
+
+  public void setPrefixNsBoolean(Boolean prefixNsBoolean) {
+    this.prefixNsBoolean = prefixNsBoolean;
+  }
+
+  public XmlItem prefixNsArray(List<Integer> prefixNsArray) {
+    this.prefixNsArray = prefixNsArray;
+    return this;
+  }
+
+  public XmlItem addPrefixNsArrayItem(Integer prefixNsArrayItem) {
+    if (this.prefixNsArray == null) {
+      this.prefixNsArray = new ArrayList<>();
+    }
+    this.prefixNsArray.add(prefixNsArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixNsArray
+   * @return prefixNsArray
+  */
+  @Schema(name = "prefixNsArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixNsArray() {
+    return prefixNsArray;
+  }
+
+  public void setPrefixNsArray(List<Integer> prefixNsArray) {
+    this.prefixNsArray = prefixNsArray;
+  }
+
+  public XmlItem prefixNsWrappedArray(List<Integer> prefixNsWrappedArray) {
+    this.prefixNsWrappedArray = prefixNsWrappedArray;
+    return this;
+  }
+
+  public XmlItem addPrefixNsWrappedArrayItem(Integer prefixNsWrappedArrayItem) {
+    if (this.prefixNsWrappedArray == null) {
+      this.prefixNsWrappedArray = new ArrayList<>();
+    }
+    this.prefixNsWrappedArray.add(prefixNsWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixNsWrappedArray
+   * @return prefixNsWrappedArray
+  */
+  @Schema(name = "prefixNsWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixNsWrappedArray() {
+    return prefixNsWrappedArray;
+  }
+
+  public void setPrefixNsWrappedArray(List<Integer> prefixNsWrappedArray) {
+    this.prefixNsWrappedArray = prefixNsWrappedArray;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    XmlItem xmlItem = (XmlItem) o;
+    return Objects.equals(this.attributeString, xmlItem.attributeString) &&
+        Objects.equals(this.attributeNumber, xmlItem.attributeNumber) &&
+        Objects.equals(this.attributeInteger, xmlItem.attributeInteger) &&
+        Objects.equals(this.attributeBoolean, xmlItem.attributeBoolean) &&
+        Objects.equals(this.wrappedArray, xmlItem.wrappedArray) &&
+        Objects.equals(this.nameString, xmlItem.nameString) &&
+        Objects.equals(this.nameNumber, xmlItem.nameNumber) &&
+        Objects.equals(this.nameInteger, xmlItem.nameInteger) &&
+        Objects.equals(this.nameBoolean, xmlItem.nameBoolean) &&
+        Objects.equals(this.nameArray, xmlItem.nameArray) &&
+        Objects.equals(this.nameWrappedArray, xmlItem.nameWrappedArray) &&
+        Objects.equals(this.prefixString, xmlItem.prefixString) &&
+        Objects.equals(this.prefixNumber, xmlItem.prefixNumber) &&
+        Objects.equals(this.prefixInteger, xmlItem.prefixInteger) &&
+        Objects.equals(this.prefixBoolean, xmlItem.prefixBoolean) &&
+        Objects.equals(this.prefixArray, xmlItem.prefixArray) &&
+        Objects.equals(this.prefixWrappedArray, xmlItem.prefixWrappedArray) &&
+        Objects.equals(this.namespaceString, xmlItem.namespaceString) &&
+        Objects.equals(this.namespaceNumber, xmlItem.namespaceNumber) &&
+        Objects.equals(this.namespaceInteger, xmlItem.namespaceInteger) &&
+        Objects.equals(this.namespaceBoolean, xmlItem.namespaceBoolean) &&
+        Objects.equals(this.namespaceArray, xmlItem.namespaceArray) &&
+        Objects.equals(this.namespaceWrappedArray, xmlItem.namespaceWrappedArray) &&
+        Objects.equals(this.prefixNsString, xmlItem.prefixNsString) &&
+        Objects.equals(this.prefixNsNumber, xmlItem.prefixNsNumber) &&
+        Objects.equals(this.prefixNsInteger, xmlItem.prefixNsInteger) &&
+        Objects.equals(this.prefixNsBoolean, xmlItem.prefixNsBoolean) &&
+        Objects.equals(this.prefixNsArray, xmlItem.prefixNsArray) &&
+        Objects.equals(this.prefixNsWrappedArray, xmlItem.prefixNsWrappedArray);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(attributeString, attributeNumber, attributeInteger, attributeBoolean, wrappedArray, nameString, nameNumber, nameInteger, nameBoolean, nameArray, nameWrappedArray, prefixString, prefixNumber, prefixInteger, prefixBoolean, prefixArray, prefixWrappedArray, namespaceString, namespaceNumber, namespaceInteger, namespaceBoolean, namespaceArray, namespaceWrappedArray, prefixNsString, prefixNsNumber, prefixNsInteger, prefixNsBoolean, prefixNsArray, prefixNsWrappedArray);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class XmlItem {\n");
+    
+    sb.append("    attributeString: ").append(toIndentedString(attributeString)).append("\n");
+    sb.append("    attributeNumber: ").append(toIndentedString(attributeNumber)).append("\n");
+    sb.append("    attributeInteger: ").append(toIndentedString(attributeInteger)).append("\n");
+    sb.append("    attributeBoolean: ").append(toIndentedString(attributeBoolean)).append("\n");
+    sb.append("    wrappedArray: ").append(toIndentedString(wrappedArray)).append("\n");
+    sb.append("    nameString: ").append(toIndentedString(nameString)).append("\n");
+    sb.append("    nameNumber: ").append(toIndentedString(nameNumber)).append("\n");
+    sb.append("    nameInteger: ").append(toIndentedString(nameInteger)).append("\n");
+    sb.append("    nameBoolean: ").append(toIndentedString(nameBoolean)).append("\n");
+    sb.append("    nameArray: ").append(toIndentedString(nameArray)).append("\n");
+    sb.append("    nameWrappedArray: ").append(toIndentedString(nameWrappedArray)).append("\n");
+    sb.append("    prefixString: ").append(toIndentedString(prefixString)).append("\n");
+    sb.append("    prefixNumber: ").append(toIndentedString(prefixNumber)).append("\n");
+    sb.append("    prefixInteger: ").append(toIndentedString(prefixInteger)).append("\n");
+    sb.append("    prefixBoolean: ").append(toIndentedString(prefixBoolean)).append("\n");
+    sb.append("    prefixArray: ").append(toIndentedString(prefixArray)).append("\n");
+    sb.append("    prefixWrappedArray: ").append(toIndentedString(prefixWrappedArray)).append("\n");
+    sb.append("    namespaceString: ").append(toIndentedString(namespaceString)).append("\n");
+    sb.append("    namespaceNumber: ").append(toIndentedString(namespaceNumber)).append("\n");
+    sb.append("    namespaceInteger: ").append(toIndentedString(namespaceInteger)).append("\n");
+    sb.append("    namespaceBoolean: ").append(toIndentedString(namespaceBoolean)).append("\n");
+    sb.append("    namespaceArray: ").append(toIndentedString(namespaceArray)).append("\n");
+    sb.append("    namespaceWrappedArray: ").append(toIndentedString(namespaceWrappedArray)).append("\n");
+    sb.append("    prefixNsString: ").append(toIndentedString(prefixNsString)).append("\n");
+    sb.append("    prefixNsNumber: ").append(toIndentedString(prefixNsNumber)).append("\n");
+    sb.append("    prefixNsInteger: ").append(toIndentedString(prefixNsInteger)).append("\n");
+    sb.append("    prefixNsBoolean: ").append(toIndentedString(prefixNsBoolean)).append("\n");
+    sb.append("    prefixNsArray: ").append(toIndentedString(prefixNsArray)).append("\n");
+    sb.append("    prefixNsWrappedArray: ").append(toIndentedString(prefixNsWrappedArray)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/.openapi-generator-ignore b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/.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/openapi3/client/petstore/spring-cloud-spring-pageable/.openapi-generator/FILES b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..3510d2b2d2760f8b8df17c0b2292ece84393be1a
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/.openapi-generator/FILES
@@ -0,0 +1,16 @@
+README.md
+pom.xml
+src/main/java/org/openapitools/api/PetApi.java
+src/main/java/org/openapitools/api/PetApiClient.java
+src/main/java/org/openapitools/api/StoreApi.java
+src/main/java/org/openapitools/api/StoreApiClient.java
+src/main/java/org/openapitools/api/UserApi.java
+src/main/java/org/openapitools/api/UserApiClient.java
+src/main/java/org/openapitools/configuration/ApiKeyRequestInterceptor.java
+src/main/java/org/openapitools/configuration/ClientConfiguration.java
+src/main/java/org/openapitools/model/Category.java
+src/main/java/org/openapitools/model/ModelApiResponse.java
+src/main/java/org/openapitools/model/Order.java
+src/main/java/org/openapitools/model/Pet.java
+src/main/java/org/openapitools/model/Tag.java
+src/main/java/org/openapitools/model/User.java
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..0984c4c1ad213d3a352049ad557efc9bd5140752
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/README.md b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5a67356a900bdddfefa86b6550b69821ef9c4045
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/README.md
@@ -0,0 +1,53 @@
+# spring-cloud-spring-pageable
+
+## Requirements
+
+Building the API client library requires [Maven](https://maven.apache.org/) to be installed.
+
+## Installation
+
+To install the API client library to your local Maven repository, simply execute:
+
+```shell
+mvn install
+```
+
+To deploy it to a remote Maven repository instead, configure the settings of the repository and execute:
+
+```shell
+mvn deploy
+```
+
+Refer to the [official documentation](https://maven.apache.org/plugins/maven-deploy-plugin/usage.html) for more information.
+
+### Maven users
+
+Add this dependency to your project's POM:
+
+```xml
+<dependency>
+    <groupId>org.openapitools.openapi3</groupId>
+    <artifactId>spring-cloud-spring-pageable</artifactId>
+    <version>1.0.0</version>
+    <scope>compile</scope>
+</dependency>
+```
+
+### Gradle users
+
+Add this dependency to your project's build file:
+
+```groovy
+compile "org.openapitools.openapi3:spring-cloud-spring-pageable:1.0.0"
+```
+
+### Others
+
+At first generate the JAR by executing:
+
+mvn package
+
+Then manually install the following JARs:
+
+* target/spring-cloud-spring-pageable-1.0.0.jar
+* target/lib/*.jar
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/pom.xml b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..648e8d7f99502da2137eabe7263aa36f81e93f48
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/pom.xml
@@ -0,0 +1,79 @@
+<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.openapi3</groupId>
+    <artifactId>spring-cloud-spring-pageable</artifactId>
+    <packaging>jar</packaging>
+    <name>spring-cloud-spring-pageable</name>
+    <version>1.0.0</version>
+    <properties>
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>2.1.11</swagger-core-version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.6.2</version>
+    </parent>
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+    </build>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-starter-parent</artifactId>
+                <version>2021.0.0</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>${swagger-core-version}</version>
+        </dependency>
+        <!-- @Nullable annotation -->
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-oauth2</artifactId>
+            <version>2.2.5.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>0.2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..9eb95c97b89132b5dfe57824e0f8d10262f6aa73
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java
@@ -0,0 +1,271 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.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.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "Pet", description = "the Pet API")
+public interface PetApi {
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Add a new pet to the store",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet",
+        consumes = "application/json"
+    )
+    ResponseEntity<Void> addPet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    );
+
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @param apiKey  (optional)
+     * @return Invalid pet value (status code 400)
+     */
+    @Operation(
+        summary = "Deletes a pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid pet value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/pet/{petId}"
+    )
+    ResponseEntity<Void> deletePet(
+        @Parameter(name = "petId", description = "Pet id to delete", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "api_key", description = "", schema = @Schema(description = "")) @RequestHeader(value = "api_key", required = false) String apiKey
+    );
+
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     */
+    @Operation(
+        summary = "Finds Pets by status",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid status value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByStatus",
+        produces = "application/json"
+    )
+    ResponseEntity<List<Pet>> findPetsByStatus(
+        @NotNull @Parameter(name = "status", description = "Status values that need to be considered for filter", required = true, schema = @Schema(description = "", allowableValues = { "available", "pending", "sold" })) @Valid @RequestParam(value = "status", required = true) List<String> status,
+        final org.springframework.data.domain.Pageable pageable
+    );
+
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     */
+    @Operation(
+        summary = "Finds Pets by tags",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid tag value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByTags",
+        produces = "application/json"
+    )
+    ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @Parameter(name = "tags", description = "Tags to filter by", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "tags", required = true) List<String> tags,
+        final org.springframework.data.domain.Pageable pageable
+    );
+
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     */
+    @Operation(
+        summary = "Find pet by ID",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/{petId}",
+        produces = "application/json"
+    )
+    ResponseEntity<Pet> getPetById(
+        @Parameter(name = "petId", description = "ID of pet to return", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId
+    );
+
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     */
+    @Operation(
+        summary = "Update an existing pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found"),
+            @ApiResponse(responseCode = "405", description = "Validation exception")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/pet",
+        consumes = "application/json"
+    )
+    ResponseEntity<Void> updatePet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    );
+
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Updates a pet in the store with form data",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}",
+        consumes = "application/x-www-form-urlencoded"
+    )
+    ResponseEntity<Void> updatePetWithForm(
+        @Parameter(name = "petId", description = "ID of pet that needs to be updated", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "name", description = "Updated name of the pet", schema = @Schema(description = "")) @RequestParam(value="name", required=false) String name,
+        @Parameter(name = "status", description = "Updated status of the pet", schema = @Schema(description = "")) @RequestParam(value="status", required=false) String status
+    );
+
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}/uploadImage",
+        produces = "application/json",
+        consumes = "multipart/form-data"
+    )
+    ResponseEntity<ModelApiResponse> uploadFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @RequestParam(value="additionalMetadata", required=false) String additionalMetadata,
+        @Parameter(name = "file", description = "file to upload", schema = @Schema(description = "")) @RequestParam("file") MultipartFile file
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApiClient.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApiClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..f80fe4ddc678757fd8cc24d896cb7fbe353b3993
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApiClient.java
@@ -0,0 +1,8 @@
+package org.openapitools.api;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.openapitools.configuration.ClientConfiguration;
+
+@FeignClient(name="${pet.name:pet}", url="${pet.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
+public interface PetApiClient extends PetApi {
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..a11117a8c9faa3d1ee2bc812c70ac27d63dc106c
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java
@@ -0,0 +1,139 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.Map;
+import org.openapitools.model.Order;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "Store", description = "the Store API")
+public interface StoreApi {
+
+    /**
+     * DELETE /store/order/{orderId} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/store/order/{orderId}"
+    )
+    ResponseEntity<Void> deleteOrder(
+        @Parameter(name = "orderId", description = "ID of the order that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("orderId") String orderId
+    );
+
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Returns pet inventories by status",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Map.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/inventory",
+        produces = "application/json"
+    )
+    ResponseEntity<Map<String, Integer>> getInventory(
+        
+    );
+
+
+    /**
+     * GET /store/order/{orderId} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Find purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/order/{orderId}",
+        produces = "application/json"
+    )
+    ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @Parameter(name = "orderId", description = "ID of pet that needs to be fetched", required = true, schema = @Schema(description = "")) @PathVariable("orderId") Long orderId
+    );
+
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param body order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     */
+    @Operation(
+        summary = "Place an order for a pet",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid Order")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/store/order",
+        produces = "application/json"
+    )
+    ResponseEntity<Order> placeOrder(
+        @Parameter(name = "body", description = "order placed for purchasing the pet", required = true, schema = @Schema(description = "")) @Valid @RequestBody Order body
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApiClient.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApiClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..71d613a871dd95d6652d7c807425bf45f06334e7
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApiClient.java
@@ -0,0 +1,8 @@
+package org.openapitools.api;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.openapitools.configuration.ClientConfiguration;
+
+@FeignClient(name="${store.name:store}", url="${store.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
+public interface StoreApiClient extends StoreApi {
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..f583fb099e73317bf10e87540597396e59a6d056
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java
@@ -0,0 +1,251 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.List;
+import java.time.OffsetDateTime;
+import org.openapitools.model.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "User", description = "the User API")
+public interface UserApi {
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param body Created user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Create user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user"
+    )
+    ResponseEntity<Void> createUser(
+        @Parameter(name = "body", description = "Created user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    );
+
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithArray"
+    )
+    ResponseEntity<Void> createUsersWithArrayInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    );
+
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithList"
+    )
+    ResponseEntity<Void> createUsersWithListInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    );
+
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/user/{username}"
+    )
+    ResponseEntity<Void> deleteUser(
+        @Parameter(name = "username", description = "The name that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    );
+
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Get user by user name",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  User.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/{username}",
+        produces = "application/json"
+    )
+    ResponseEntity<User> getUserByName(
+        @Parameter(name = "username", description = "The name that needs to be fetched. Use user1 for testing.", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    );
+
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     */
+    @Operation(
+        summary = "Logs user into the system",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username/password supplied")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/login",
+        produces = "application/json"
+    )
+    ResponseEntity<String> loginUser(
+        @NotNull @Parameter(name = "username", description = "The user name for login", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @Parameter(name = "password", description = "The password for login in clear text", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "password", required = true) String password
+    );
+
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Logs out current logged in user session",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/logout"
+    )
+    ResponseEntity<Void> logoutUser(
+        
+    );
+
+
+    /**
+     * OPTIONS /user/logout : logoutUserOptions
+     *
+     * @return endpoint configuration response (status code 200)
+     */
+    @Operation(
+        summary = "logoutUserOptions",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "endpoint configuration response")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.OPTIONS,
+        value = "/user/logout"
+    )
+    ResponseEntity<Void> logoutUserOptions(
+        
+    );
+
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param body Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Updated user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid user supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/user/{username}"
+    )
+    ResponseEntity<Void> updateUser(
+        @Parameter(name = "username", description = "name that need to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(name = "body", description = "Updated user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApiClient.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApiClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..1db4598108db8bd42a6d52a426c79028ce6df837
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApiClient.java
@@ -0,0 +1,8 @@
+package org.openapitools.api;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.openapitools.configuration.ClientConfiguration;
+
+@FeignClient(name="${user.name:user}", url="${user.url:http://petstore.swagger.io/v2}", configuration = ClientConfiguration.class)
+public interface UserApiClient extends UserApi {
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/configuration/ApiKeyRequestInterceptor.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/configuration/ApiKeyRequestInterceptor.java
new file mode 100644
index 0000000000000000000000000000000000000000..199278dcb539c3e9160008394b6d949afe48669c
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/configuration/ApiKeyRequestInterceptor.java
@@ -0,0 +1,31 @@
+package org.openapitools.configuration;
+
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import feign.Util;
+
+
+public class ApiKeyRequestInterceptor implements RequestInterceptor {
+  private final String location;
+  private final String name;
+  private String value;
+
+  public ApiKeyRequestInterceptor(String location, String name, String value) {
+    Util.checkNotNull(location, "location", new Object[0]);
+    Util.checkNotNull(name, "name", new Object[0]);
+    Util.checkNotNull(value, "value", new Object[0]);
+    this.location = location;
+    this.name = name;
+    this.value = value;
+  }
+
+  @Override
+  public void apply(RequestTemplate requestTemplate) {
+    if(location.equals("header")) {
+      requestTemplate.header(name, value);
+    } else if(location.equals("query")) {
+      requestTemplate.query(name, value);
+    }
+  }
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/configuration/ClientConfiguration.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/configuration/ClientConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a28661290d98a102e7aab66748b7b4d0e306e60
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/configuration/ClientConfiguration.java
@@ -0,0 +1,48 @@
+package org.openapitools.configuration;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.cloud.openfeign.security.OAuth2FeignRequestInterceptor;
+import org.springframework.security.oauth2.client.DefaultOAuth2ClientContext;
+import org.springframework.security.oauth2.client.OAuth2ClientContext;
+import org.springframework.security.oauth2.client.token.grant.implicit.ImplicitResourceDetails;
+
+@Configuration
+@EnableConfigurationProperties
+public class ClientConfiguration {
+
+  @Value("${openapipetstore.security.apiKey.key:}")
+  private String apiKeyKey;
+
+  @Bean
+  @ConditionalOnProperty(name = "openapipetstore.security.apiKey.key")
+  public ApiKeyRequestInterceptor apiKeyRequestInterceptor() {
+    return new ApiKeyRequestInterceptor("header", "api_key", this.apiKeyKey);
+  }
+
+  @Bean
+  @ConditionalOnProperty("openapipetstore.security.petstoreAuth.client-id")
+  public OAuth2FeignRequestInterceptor petstoreAuthRequestInterceptor(OAuth2ClientContext oAuth2ClientContext) {
+    return new OAuth2FeignRequestInterceptor(oAuth2ClientContext, petstoreAuthResourceDetails());
+  }
+
+  @Bean
+  @ConditionalOnProperty("openapipetstore.security.petstoreAuth.client-id")
+  public OAuth2ClientContext oAuth2ClientContext() {
+    return new DefaultOAuth2ClientContext();
+  }
+
+  @Bean
+  @ConditionalOnProperty("openapipetstore.security.petstoreAuth.client-id")
+  @ConfigurationProperties("openapipetstore.security.petstoreAuth")
+  public ImplicitResourceDetails petstoreAuthResourceDetails() {
+    ImplicitResourceDetails details = new ImplicitResourceDetails();
+    details.setUserAuthorizationUri("http://petstore.swagger.io/api/oauth/dialog");
+    return details;
+  }
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/Category.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/Category.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb69c674a1e4eb26f08848913d1bb4e0675bd1b2
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/Category.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A category for a pet
+ */
+@Schema(name = "Category",description = "A category for a pet")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Category   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Category id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Category name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Category category = (Category) o;
+    return Objects.equals(this.id, category.id) &&
+        Objects.equals(this.name, category.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Category {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/ModelApiResponse.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/ModelApiResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..0ef610e38f015da0ce3e71fa99fde283c1d59cb6
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/ModelApiResponse.java
@@ -0,0 +1,134 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Describes the result of uploading an image resource
+ */
+@Schema(name = "ApiResponse",description = "Describes the result of uploading an image resource")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelApiResponse   {
+  @JsonProperty("code")
+  private Integer code;
+
+  @JsonProperty("type")
+  private String type;
+
+  @JsonProperty("message")
+  private String message;
+
+  public ModelApiResponse code(Integer code) {
+    this.code = code;
+    return this;
+  }
+
+  /**
+   * Get code
+   * @return code
+  */
+  @Schema(name = "code", defaultValue = "")
+
+
+  public Integer getCode() {
+    return code;
+  }
+
+  public void setCode(Integer code) {
+    this.code = code;
+  }
+
+  public ModelApiResponse type(String type) {
+    this.type = type;
+    return this;
+  }
+
+  /**
+   * Get type
+   * @return type
+  */
+  @Schema(name = "type", defaultValue = "")
+
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public ModelApiResponse message(String message) {
+    this.message = message;
+    return this;
+  }
+
+  /**
+   * Get message
+   * @return message
+  */
+  @Schema(name = "message", defaultValue = "")
+
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelApiResponse _apiResponse = (ModelApiResponse) o;
+    return Objects.equals(this.code, _apiResponse.code) &&
+        Objects.equals(this.type, _apiResponse.type) &&
+        Objects.equals(this.message, _apiResponse.message);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(code, type, message);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelApiResponse {\n");
+    
+    sb.append("    code: ").append(toIndentedString(code)).append("\n");
+    sb.append("    type: ").append(toIndentedString(type)).append("\n");
+    sb.append("    message: ").append(toIndentedString(message)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/Order.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/Order.java
new file mode 100644
index 0000000000000000000000000000000000000000..528598b79ea73023103fc45511908a8c65602454
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/Order.java
@@ -0,0 +1,250 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.time.OffsetDateTime;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * An order for a pets from the pet store
+ */
+@Schema(name = "Order",description = "An order for a pets from the pet store")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Order   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("petId")
+  private Long petId;
+
+  @JsonProperty("quantity")
+  private Integer quantity;
+
+  @JsonProperty("shipDate")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime shipDate;
+
+  /**
+   * Order Status
+   */
+  public enum StatusEnum {
+    PLACED("placed"),
+    
+    APPROVED("approved"),
+    
+    DELIVERED("delivered");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  @JsonProperty("complete")
+  private Boolean complete = false;
+
+  public Order id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Order petId(Long petId) {
+    this.petId = petId;
+    return this;
+  }
+
+  /**
+   * Get petId
+   * @return petId
+  */
+  @Schema(name = "petId", defaultValue = "")
+
+
+  public Long getPetId() {
+    return petId;
+  }
+
+  public void setPetId(Long petId) {
+    this.petId = petId;
+  }
+
+  public Order quantity(Integer quantity) {
+    this.quantity = quantity;
+    return this;
+  }
+
+  /**
+   * Get quantity
+   * @return quantity
+  */
+  @Schema(name = "quantity", defaultValue = "")
+
+
+  public Integer getQuantity() {
+    return quantity;
+  }
+
+  public void setQuantity(Integer quantity) {
+    this.quantity = quantity;
+  }
+
+  public Order shipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+    return this;
+  }
+
+  /**
+   * Get shipDate
+   * @return shipDate
+  */
+  @Schema(name = "shipDate", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getShipDate() {
+    return shipDate;
+  }
+
+  public void setShipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+  }
+
+  public Order status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Order Status
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "Order Status")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+  public Order complete(Boolean complete) {
+    this.complete = complete;
+    return this;
+  }
+
+  /**
+   * Get complete
+   * @return complete
+  */
+  @Schema(name = "complete", defaultValue = "")
+
+
+  public Boolean getComplete() {
+    return complete;
+  }
+
+  public void setComplete(Boolean complete) {
+    this.complete = complete;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Order order = (Order) o;
+    return Objects.equals(this.id, order.id) &&
+        Objects.equals(this.petId, order.petId) &&
+        Objects.equals(this.quantity, order.quantity) &&
+        Objects.equals(this.shipDate, order.shipDate) &&
+        Objects.equals(this.status, order.status) &&
+        Objects.equals(this.complete, order.complete);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, petId, quantity, shipDate, status, complete);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Order {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    petId: ").append(toIndentedString(petId)).append("\n");
+    sb.append("    quantity: ").append(toIndentedString(quantity)).append("\n");
+    sb.append("    shipDate: ").append(toIndentedString(shipDate)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    complete: ").append(toIndentedString(complete)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/Pet.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/Pet.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c2986fea846e0386388ff797d8c60905ef99aa3
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/Pet.java
@@ -0,0 +1,270 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.model.Category;
+import org.openapitools.model.Tag;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A pet for sale in the pet store
+ */
+@Schema(name = "Pet",description = "A pet for sale in the pet store")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Pet   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("category")
+  private Category category;
+
+  @JsonProperty("name")
+  private String name;
+
+  @JsonProperty("photoUrls")
+  @Valid
+  private List<String> photoUrls = new ArrayList<>();
+
+  @JsonProperty("tags")
+  @Valid
+  private List<Tag> tags = null;
+
+  /**
+   * pet status in the store
+   */
+  public enum StatusEnum {
+    AVAILABLE("available"),
+    
+    PENDING("pending"),
+    
+    SOLD("sold");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  public Pet id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Pet category(Category category) {
+    this.category = category;
+    return this;
+  }
+
+  /**
+   * Get category
+   * @return category
+  */
+  @Schema(name = "category", defaultValue = "")
+
+  @Valid
+
+  public Category getCategory() {
+    return category;
+  }
+
+  public void setCategory(Category category) {
+    this.category = category;
+  }
+
+  public Pet name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", example = "doggie", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public Pet photoUrls(List<String> photoUrls) {
+    this.photoUrls = photoUrls;
+    return this;
+  }
+
+  public Pet addPhotoUrlsItem(String photoUrlsItem) {
+    this.photoUrls.add(photoUrlsItem);
+    return this;
+  }
+
+  /**
+   * Get photoUrls
+   * @return photoUrls
+  */
+  @Schema(name = "photoUrls", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<String> getPhotoUrls() {
+    return photoUrls;
+  }
+
+  public void setPhotoUrls(List<String> photoUrls) {
+    this.photoUrls = photoUrls;
+  }
+
+  public Pet tags(List<Tag> tags) {
+    this.tags = tags;
+    return this;
+  }
+
+  public Pet addTagsItem(Tag tagsItem) {
+    if (this.tags == null) {
+      this.tags = new ArrayList<>();
+    }
+    this.tags.add(tagsItem);
+    return this;
+  }
+
+  /**
+   * Get tags
+   * @return tags
+  */
+  @Schema(name = "tags", defaultValue = "")
+
+  @Valid
+
+  public List<Tag> getTags() {
+    return tags;
+  }
+
+  public void setTags(List<Tag> tags) {
+    this.tags = tags;
+  }
+
+  public Pet status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * pet status in the store
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "pet status in the store")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Pet pet = (Pet) o;
+    return Objects.equals(this.id, pet.id) &&
+        Objects.equals(this.category, pet.category) &&
+        Objects.equals(this.name, pet.name) &&
+        Objects.equals(this.photoUrls, pet.photoUrls) &&
+        Objects.equals(this.tags, pet.tags) &&
+        Objects.equals(this.status, pet.status);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, category, name, photoUrls, tags, status);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Pet {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    category: ").append(toIndentedString(category)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    photoUrls: ").append(toIndentedString(photoUrls)).append("\n");
+    sb.append("    tags: ").append(toIndentedString(tags)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/Tag.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/Tag.java
new file mode 100644
index 0000000000000000000000000000000000000000..27166f687a27bb2f4a97d9ffdc486b35a263bd2e
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/Tag.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A tag for a pet
+ */
+@Schema(name = "Tag",description = "A tag for a pet")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Tag   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Tag id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Tag name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Tag tag = (Tag) o;
+    return Objects.equals(this.id, tag.id) &&
+        Objects.equals(this.name, tag.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Tag {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/User.java b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba24f681c1df96bffda12b6d91738e52801d6077
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/model/User.java
@@ -0,0 +1,259 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A User who is purchasing from the pet store
+ */
+@Schema(name = "User",description = "A User who is purchasing from the pet store")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class User   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("username")
+  private String username;
+
+  @JsonProperty("firstName")
+  private String firstName;
+
+  @JsonProperty("lastName")
+  private String lastName;
+
+  @JsonProperty("email")
+  private String email;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("phone")
+  private String phone;
+
+  @JsonProperty("userStatus")
+  private Integer userStatus;
+
+  public User id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public User username(String username) {
+    this.username = username;
+    return this;
+  }
+
+  /**
+   * Get username
+   * @return username
+  */
+  @Schema(name = "username", defaultValue = "")
+
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public User firstName(String firstName) {
+    this.firstName = firstName;
+    return this;
+  }
+
+  /**
+   * Get firstName
+   * @return firstName
+  */
+  @Schema(name = "firstName", defaultValue = "")
+
+
+  public String getFirstName() {
+    return firstName;
+  }
+
+  public void setFirstName(String firstName) {
+    this.firstName = firstName;
+  }
+
+  public User lastName(String lastName) {
+    this.lastName = lastName;
+    return this;
+  }
+
+  /**
+   * Get lastName
+   * @return lastName
+  */
+  @Schema(name = "lastName", defaultValue = "")
+
+
+  public String getLastName() {
+    return lastName;
+  }
+
+  public void setLastName(String lastName) {
+    this.lastName = lastName;
+  }
+
+  public User email(String email) {
+    this.email = email;
+    return this;
+  }
+
+  /**
+   * Get email
+   * @return email
+  */
+  @Schema(name = "email", defaultValue = "")
+
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+  public User password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", defaultValue = "")
+
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public User phone(String phone) {
+    this.phone = phone;
+    return this;
+  }
+
+  /**
+   * Get phone
+   * @return phone
+  */
+  @Schema(name = "phone", defaultValue = "")
+
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public User userStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+    return this;
+  }
+
+  /**
+   * User Status
+   * @return userStatus
+  */
+  @Schema(name = "userStatus", defaultValue = "User Status")
+
+
+  public Integer getUserStatus() {
+    return userStatus;
+  }
+
+  public void setUserStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    User user = (User) o;
+    return Objects.equals(this.id, user.id) &&
+        Objects.equals(this.username, user.username) &&
+        Objects.equals(this.firstName, user.firstName) &&
+        Objects.equals(this.lastName, user.lastName) &&
+        Objects.equals(this.email, user.email) &&
+        Objects.equals(this.password, user.password) &&
+        Objects.equals(this.phone, user.phone) &&
+        Objects.equals(this.userStatus, user.userStatus);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class User {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    username: ").append(toIndentedString(username)).append("\n");
+    sb.append("    firstName: ").append(toIndentedString(firstName)).append("\n");
+    sb.append("    lastName: ").append(toIndentedString(lastName)).append("\n");
+    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    phone: ").append(toIndentedString(phone)).append("\n");
+    sb.append("    userStatus: ").append(toIndentedString(userStatus)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud/.openapi-generator-ignore b/samples/openapi3/client/petstore/spring-cloud/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/.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/openapi3/client/petstore/spring-cloud/.openapi-generator/FILES b/samples/openapi3/client/petstore/spring-cloud/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..5e5e7f604560f6e6037bba5b1cce19188b21f15c
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/.openapi-generator/FILES
@@ -0,0 +1,11 @@
+README.md
+pom.xml
+src/main/java/org/openapitools/api/PetApi.java
+src/main/java/org/openapitools/api/StoreApi.java
+src/main/java/org/openapitools/api/UserApi.java
+src/main/java/org/openapitools/model/Category.java
+src/main/java/org/openapitools/model/ModelApiResponse.java
+src/main/java/org/openapitools/model/Order.java
+src/main/java/org/openapitools/model/Pet.java
+src/main/java/org/openapitools/model/Tag.java
+src/main/java/org/openapitools/model/User.java
diff --git a/samples/openapi3/client/petstore/spring-cloud/.openapi-generator/VERSION b/samples/openapi3/client/petstore/spring-cloud/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..0984c4c1ad213d3a352049ad557efc9bd5140752
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/spring-cloud/README.md b/samples/openapi3/client/petstore/spring-cloud/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a462be951ace6611621bc537aacd573e4486a38a
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/README.md
@@ -0,0 +1,26 @@
+# OpenAPI generated API stub
+
+Spring Framework stub
+
+
+## Overview
+This code was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
+By using the [OpenAPI-Spec](https://openapis.org), you can easily generate an API stub.
+This is an example of building API stub interfaces in Java using the Spring framework.
+
+The stubs generated can be used in your existing Spring-MVC or Spring-Boot application to create controller endpoints
+by adding ```@Controller``` classes that implement the interface. Eg:
+```java
+@Controller
+public class PetController implements PetApi {
+// implement all PetApi methods
+}
+```
+
+You can also use the interface to create [Spring-Cloud Feign clients](http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign-inheritance).Eg:
+```java
+@FeignClient(name="pet", url="http://petstore.swagger.io/v2")
+public interface PetClient extends PetApi {
+
+}
+```
diff --git a/samples/openapi3/client/petstore/spring-cloud/pom.xml b/samples/openapi3/client/petstore/spring-cloud/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6cf023f501f220b3498ac765295d597ed851111e
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/pom.xml
@@ -0,0 +1,79 @@
+<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.openapi3</groupId>
+    <artifactId>spring-cloud-oas3</artifactId>
+    <packaging>jar</packaging>
+    <name>spring-cloud-oas3</name>
+    <version>1.0.0</version>
+    <properties>
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>2.1.11</swagger-core-version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.6.2</version>
+    </parent>
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+    </build>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-starter-parent</artifactId>
+                <version>2021.0.0</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>${swagger-core-version}</version>
+        </dependency>
+        <!-- @Nullable annotation -->
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-oauth2</artifactId>
+            <version>2.2.5.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>0.2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..90dfd2c5f8e93f11ddcedfc5a8f4e96f68a16489
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java
@@ -0,0 +1,275 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.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.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "Pet", description = "the Pet API")
+public interface PetApi {
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param pet Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Add a new pet to the store",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet",
+        produces = "application/json",
+        consumes = "application/json"
+    )
+    ResponseEntity<Pet> addPet(
+        @Parameter(name = "Pet", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet pet
+    );
+
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @param apiKey  (optional)
+     * @return Invalid pet value (status code 400)
+     */
+    @Operation(
+        summary = "Deletes a pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid pet value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/pet/{petId}"
+    )
+    ResponseEntity<Void> deletePet(
+        @Parameter(name = "petId", description = "Pet id to delete", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "api_key", description = "", schema = @Schema(description = "")) @RequestHeader(value = "api_key", required = false) String apiKey
+    );
+
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     */
+    @Operation(
+        summary = "Finds Pets by status",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid status value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByStatus",
+        produces = "application/json"
+    )
+    ResponseEntity<List<Pet>> findPetsByStatus(
+        @NotNull @Parameter(name = "status", description = "Status values that need to be considered for filter", required = true, schema = @Schema(description = "", allowableValues = { "available", "pending", "sold" })) @Valid @RequestParam(value = "status", required = true) List<String> status
+    );
+
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     */
+    @Operation(
+        summary = "Finds Pets by tags",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid tag value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByTags",
+        produces = "application/json"
+    )
+    ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @Parameter(name = "tags", description = "Tags to filter by", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "tags", required = true) List<String> tags
+    );
+
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     */
+    @Operation(
+        summary = "Find pet by ID",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/{petId}",
+        produces = "application/json"
+    )
+    ResponseEntity<Pet> getPetById(
+        @Parameter(name = "petId", description = "ID of pet to return", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId
+    );
+
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param pet Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     */
+    @Operation(
+        summary = "Update an existing pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found"),
+            @ApiResponse(responseCode = "405", description = "Validation exception")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/pet",
+        produces = "application/json",
+        consumes = "application/json"
+    )
+    ResponseEntity<Pet> updatePet(
+        @Parameter(name = "Pet", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet pet
+    );
+
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Updates a pet in the store with form data",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}",
+        consumes = "application/x-www-form-urlencoded"
+    )
+    ResponseEntity<Void> updatePetWithForm(
+        @Parameter(name = "petId", description = "ID of pet that needs to be updated", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "name", description = "Updated name of the pet", schema = @Schema(description = "")) @RequestParam(value="name", required=false) String name,
+        @Parameter(name = "status", description = "Updated status of the pet", schema = @Schema(description = "")) @RequestParam(value="status", required=false) String status
+    );
+
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}/uploadImage",
+        produces = "application/json",
+        consumes = "multipart/form-data"
+    )
+    ResponseEntity<ModelApiResponse> uploadFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @RequestParam(value="additionalMetadata", required=false) String additionalMetadata,
+        @Parameter(name = "file", description = "file to upload", schema = @Schema(description = "")) @RequestParam("file") MultipartFile file
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..c42b27e3a5b87ae8e391b4e32a9992c04346cc98
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java
@@ -0,0 +1,140 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.Map;
+import org.openapitools.model.Order;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "Store", description = "the Store API")
+public interface StoreApi {
+
+    /**
+     * DELETE /store/order/{orderId} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/store/order/{orderId}"
+    )
+    ResponseEntity<Void> deleteOrder(
+        @Parameter(name = "orderId", description = "ID of the order that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("orderId") String orderId
+    );
+
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Returns pet inventories by status",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Map.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/inventory",
+        produces = "application/json"
+    )
+    ResponseEntity<Map<String, Integer>> getInventory(
+        
+    );
+
+
+    /**
+     * GET /store/order/{orderId} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Find purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/order/{orderId}",
+        produces = "application/json"
+    )
+    ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @Parameter(name = "orderId", description = "ID of pet that needs to be fetched", required = true, schema = @Schema(description = "")) @PathVariable("orderId") Long orderId
+    );
+
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param order order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     */
+    @Operation(
+        summary = "Place an order for a pet",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid Order")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/store/order",
+        produces = "application/json",
+        consumes = "application/json"
+    )
+    ResponseEntity<Order> placeOrder(
+        @Parameter(name = "Order", description = "order placed for purchasing the pet", required = true, schema = @Schema(description = "")) @Valid @RequestBody Order order
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b0522ee7758776c0791fe2ade3482e925af1a74
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java
@@ -0,0 +1,252 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.List;
+import java.time.OffsetDateTime;
+import org.openapitools.model.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "User", description = "the User API")
+public interface UserApi {
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param user Created user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Create user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user",
+        consumes = "application/json"
+    )
+    ResponseEntity<Void> createUser(
+        @Parameter(name = "User", description = "Created user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User user
+    );
+
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param user List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithArray",
+        consumes = "application/json"
+    )
+    ResponseEntity<Void> createUsersWithArrayInput(
+        @Parameter(name = "User", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> user
+    );
+
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param user List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithList",
+        consumes = "application/json"
+    )
+    ResponseEntity<Void> createUsersWithListInput(
+        @Parameter(name = "User", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> user
+    );
+
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/user/{username}"
+    )
+    ResponseEntity<Void> deleteUser(
+        @Parameter(name = "username", description = "The name that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    );
+
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Get user by user name",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  User.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/{username}",
+        produces = "application/json"
+    )
+    ResponseEntity<User> getUserByName(
+        @Parameter(name = "username", description = "The name that needs to be fetched. Use user1 for testing.", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    );
+
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     */
+    @Operation(
+        summary = "Logs user into the system",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username/password supplied")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/login",
+        produces = "application/json"
+    )
+    ResponseEntity<String> loginUser(
+        @NotNull @Pattern(regexp = "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$") @Parameter(name = "username", description = "The user name for login", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @Parameter(name = "password", description = "The password for login in clear text", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "password", required = true) String password
+    );
+
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Logs out current logged in user session",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/logout"
+    )
+    ResponseEntity<Void> logoutUser(
+        
+    );
+
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param user Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Updated user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid user supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/user/{username}",
+        consumes = "application/json"
+    )
+    ResponseEntity<Void> updateUser(
+        @Parameter(name = "username", description = "name that need to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(name = "User", description = "Updated user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User user
+    );
+
+}
diff --git a/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/Category.java b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/Category.java
new file mode 100644
index 0000000000000000000000000000000000000000..463de0ed39a31ec4d78e3561fd95bbcda0adf04a
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/Category.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A category for a pet
+ */
+@Schema(name = "Category",description = "A category for a pet")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Category   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Category id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Category name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+@Pattern(regexp = "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$") 
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Category category = (Category) o;
+    return Objects.equals(this.id, category.id) &&
+        Objects.equals(this.name, category.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Category {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/ModelApiResponse.java b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/ModelApiResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..0ef610e38f015da0ce3e71fa99fde283c1d59cb6
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/ModelApiResponse.java
@@ -0,0 +1,134 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Describes the result of uploading an image resource
+ */
+@Schema(name = "ApiResponse",description = "Describes the result of uploading an image resource")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelApiResponse   {
+  @JsonProperty("code")
+  private Integer code;
+
+  @JsonProperty("type")
+  private String type;
+
+  @JsonProperty("message")
+  private String message;
+
+  public ModelApiResponse code(Integer code) {
+    this.code = code;
+    return this;
+  }
+
+  /**
+   * Get code
+   * @return code
+  */
+  @Schema(name = "code", defaultValue = "")
+
+
+  public Integer getCode() {
+    return code;
+  }
+
+  public void setCode(Integer code) {
+    this.code = code;
+  }
+
+  public ModelApiResponse type(String type) {
+    this.type = type;
+    return this;
+  }
+
+  /**
+   * Get type
+   * @return type
+  */
+  @Schema(name = "type", defaultValue = "")
+
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public ModelApiResponse message(String message) {
+    this.message = message;
+    return this;
+  }
+
+  /**
+   * Get message
+   * @return message
+  */
+  @Schema(name = "message", defaultValue = "")
+
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelApiResponse _apiResponse = (ModelApiResponse) o;
+    return Objects.equals(this.code, _apiResponse.code) &&
+        Objects.equals(this.type, _apiResponse.type) &&
+        Objects.equals(this.message, _apiResponse.message);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(code, type, message);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelApiResponse {\n");
+    
+    sb.append("    code: ").append(toIndentedString(code)).append("\n");
+    sb.append("    type: ").append(toIndentedString(type)).append("\n");
+    sb.append("    message: ").append(toIndentedString(message)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/Order.java b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/Order.java
new file mode 100644
index 0000000000000000000000000000000000000000..528598b79ea73023103fc45511908a8c65602454
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/Order.java
@@ -0,0 +1,250 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.time.OffsetDateTime;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * An order for a pets from the pet store
+ */
+@Schema(name = "Order",description = "An order for a pets from the pet store")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Order   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("petId")
+  private Long petId;
+
+  @JsonProperty("quantity")
+  private Integer quantity;
+
+  @JsonProperty("shipDate")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime shipDate;
+
+  /**
+   * Order Status
+   */
+  public enum StatusEnum {
+    PLACED("placed"),
+    
+    APPROVED("approved"),
+    
+    DELIVERED("delivered");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  @JsonProperty("complete")
+  private Boolean complete = false;
+
+  public Order id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Order petId(Long petId) {
+    this.petId = petId;
+    return this;
+  }
+
+  /**
+   * Get petId
+   * @return petId
+  */
+  @Schema(name = "petId", defaultValue = "")
+
+
+  public Long getPetId() {
+    return petId;
+  }
+
+  public void setPetId(Long petId) {
+    this.petId = petId;
+  }
+
+  public Order quantity(Integer quantity) {
+    this.quantity = quantity;
+    return this;
+  }
+
+  /**
+   * Get quantity
+   * @return quantity
+  */
+  @Schema(name = "quantity", defaultValue = "")
+
+
+  public Integer getQuantity() {
+    return quantity;
+  }
+
+  public void setQuantity(Integer quantity) {
+    this.quantity = quantity;
+  }
+
+  public Order shipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+    return this;
+  }
+
+  /**
+   * Get shipDate
+   * @return shipDate
+  */
+  @Schema(name = "shipDate", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getShipDate() {
+    return shipDate;
+  }
+
+  public void setShipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+  }
+
+  public Order status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Order Status
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "Order Status")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+  public Order complete(Boolean complete) {
+    this.complete = complete;
+    return this;
+  }
+
+  /**
+   * Get complete
+   * @return complete
+  */
+  @Schema(name = "complete", defaultValue = "")
+
+
+  public Boolean getComplete() {
+    return complete;
+  }
+
+  public void setComplete(Boolean complete) {
+    this.complete = complete;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Order order = (Order) o;
+    return Objects.equals(this.id, order.id) &&
+        Objects.equals(this.petId, order.petId) &&
+        Objects.equals(this.quantity, order.quantity) &&
+        Objects.equals(this.shipDate, order.shipDate) &&
+        Objects.equals(this.status, order.status) &&
+        Objects.equals(this.complete, order.complete);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, petId, quantity, shipDate, status, complete);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Order {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    petId: ").append(toIndentedString(petId)).append("\n");
+    sb.append("    quantity: ").append(toIndentedString(quantity)).append("\n");
+    sb.append("    shipDate: ").append(toIndentedString(shipDate)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    complete: ").append(toIndentedString(complete)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/Pet.java b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/Pet.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c2986fea846e0386388ff797d8c60905ef99aa3
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/Pet.java
@@ -0,0 +1,270 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.model.Category;
+import org.openapitools.model.Tag;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A pet for sale in the pet store
+ */
+@Schema(name = "Pet",description = "A pet for sale in the pet store")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Pet   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("category")
+  private Category category;
+
+  @JsonProperty("name")
+  private String name;
+
+  @JsonProperty("photoUrls")
+  @Valid
+  private List<String> photoUrls = new ArrayList<>();
+
+  @JsonProperty("tags")
+  @Valid
+  private List<Tag> tags = null;
+
+  /**
+   * pet status in the store
+   */
+  public enum StatusEnum {
+    AVAILABLE("available"),
+    
+    PENDING("pending"),
+    
+    SOLD("sold");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  public Pet id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Pet category(Category category) {
+    this.category = category;
+    return this;
+  }
+
+  /**
+   * Get category
+   * @return category
+  */
+  @Schema(name = "category", defaultValue = "")
+
+  @Valid
+
+  public Category getCategory() {
+    return category;
+  }
+
+  public void setCategory(Category category) {
+    this.category = category;
+  }
+
+  public Pet name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", example = "doggie", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public Pet photoUrls(List<String> photoUrls) {
+    this.photoUrls = photoUrls;
+    return this;
+  }
+
+  public Pet addPhotoUrlsItem(String photoUrlsItem) {
+    this.photoUrls.add(photoUrlsItem);
+    return this;
+  }
+
+  /**
+   * Get photoUrls
+   * @return photoUrls
+  */
+  @Schema(name = "photoUrls", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<String> getPhotoUrls() {
+    return photoUrls;
+  }
+
+  public void setPhotoUrls(List<String> photoUrls) {
+    this.photoUrls = photoUrls;
+  }
+
+  public Pet tags(List<Tag> tags) {
+    this.tags = tags;
+    return this;
+  }
+
+  public Pet addTagsItem(Tag tagsItem) {
+    if (this.tags == null) {
+      this.tags = new ArrayList<>();
+    }
+    this.tags.add(tagsItem);
+    return this;
+  }
+
+  /**
+   * Get tags
+   * @return tags
+  */
+  @Schema(name = "tags", defaultValue = "")
+
+  @Valid
+
+  public List<Tag> getTags() {
+    return tags;
+  }
+
+  public void setTags(List<Tag> tags) {
+    this.tags = tags;
+  }
+
+  public Pet status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * pet status in the store
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "pet status in the store")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Pet pet = (Pet) o;
+    return Objects.equals(this.id, pet.id) &&
+        Objects.equals(this.category, pet.category) &&
+        Objects.equals(this.name, pet.name) &&
+        Objects.equals(this.photoUrls, pet.photoUrls) &&
+        Objects.equals(this.tags, pet.tags) &&
+        Objects.equals(this.status, pet.status);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, category, name, photoUrls, tags, status);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Pet {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    category: ").append(toIndentedString(category)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    photoUrls: ").append(toIndentedString(photoUrls)).append("\n");
+    sb.append("    tags: ").append(toIndentedString(tags)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/Tag.java b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/Tag.java
new file mode 100644
index 0000000000000000000000000000000000000000..27166f687a27bb2f4a97d9ffdc486b35a263bd2e
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/Tag.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A tag for a pet
+ */
+@Schema(name = "Tag",description = "A tag for a pet")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Tag   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Tag id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Tag name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Tag tag = (Tag) o;
+    return Objects.equals(this.id, tag.id) &&
+        Objects.equals(this.name, tag.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Tag {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/User.java b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba24f681c1df96bffda12b6d91738e52801d6077
--- /dev/null
+++ b/samples/openapi3/client/petstore/spring-cloud/src/main/java/org/openapitools/model/User.java
@@ -0,0 +1,259 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A User who is purchasing from the pet store
+ */
+@Schema(name = "User",description = "A User who is purchasing from the pet store")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class User   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("username")
+  private String username;
+
+  @JsonProperty("firstName")
+  private String firstName;
+
+  @JsonProperty("lastName")
+  private String lastName;
+
+  @JsonProperty("email")
+  private String email;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("phone")
+  private String phone;
+
+  @JsonProperty("userStatus")
+  private Integer userStatus;
+
+  public User id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public User username(String username) {
+    this.username = username;
+    return this;
+  }
+
+  /**
+   * Get username
+   * @return username
+  */
+  @Schema(name = "username", defaultValue = "")
+
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public User firstName(String firstName) {
+    this.firstName = firstName;
+    return this;
+  }
+
+  /**
+   * Get firstName
+   * @return firstName
+  */
+  @Schema(name = "firstName", defaultValue = "")
+
+
+  public String getFirstName() {
+    return firstName;
+  }
+
+  public void setFirstName(String firstName) {
+    this.firstName = firstName;
+  }
+
+  public User lastName(String lastName) {
+    this.lastName = lastName;
+    return this;
+  }
+
+  /**
+   * Get lastName
+   * @return lastName
+  */
+  @Schema(name = "lastName", defaultValue = "")
+
+
+  public String getLastName() {
+    return lastName;
+  }
+
+  public void setLastName(String lastName) {
+    this.lastName = lastName;
+  }
+
+  public User email(String email) {
+    this.email = email;
+    return this;
+  }
+
+  /**
+   * Get email
+   * @return email
+  */
+  @Schema(name = "email", defaultValue = "")
+
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+  public User password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", defaultValue = "")
+
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public User phone(String phone) {
+    this.phone = phone;
+    return this;
+  }
+
+  /**
+   * Get phone
+   * @return phone
+  */
+  @Schema(name = "phone", defaultValue = "")
+
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public User userStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+    return this;
+  }
+
+  /**
+   * User Status
+   * @return userStatus
+  */
+  @Schema(name = "userStatus", defaultValue = "User Status")
+
+
+  public Integer getUserStatus() {
+    return userStatus;
+  }
+
+  public void setUserStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    User user = (User) o;
+    return Objects.equals(this.id, user.id) &&
+        Objects.equals(this.username, user.username) &&
+        Objects.equals(this.firstName, user.firstName) &&
+        Objects.equals(this.lastName, user.lastName) &&
+        Objects.equals(this.email, user.email) &&
+        Objects.equals(this.password, user.password) &&
+        Objects.equals(this.phone, user.phone) &&
+        Objects.equals(this.userStatus, user.userStatus);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class User {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    username: ").append(toIndentedString(username)).append("\n");
+    sb.append("    firstName: ").append(toIndentedString(firstName)).append("\n");
+    sb.append("    lastName: ").append(toIndentedString(lastName)).append("\n");
+    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    phone: ").append(toIndentedString(phone)).append("\n");
+    sb.append("    userStatus: ").append(toIndentedString(userStatus)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/client/petstore/typescript/builds/composed-schemas/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/composed-schemas/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/typescript/builds/composed-schemas/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/typescript/builds/composed-schemas/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/typescript/builds/default/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/typescript/builds/default/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/typescript/builds/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/deno/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/typescript/builds/deno/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/typescript/builds/deno/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/inversify/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/typescript/builds/inversify/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/typescript/builds/inversify/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/jquery/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/typescript/builds/jquery/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/typescript/builds/jquery/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/object_params/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/openapi3/client/petstore/typescript/builds/object_params/.openapi-generator/VERSION
+++ b/samples/openapi3/client/petstore/typescript/builds/object_params/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator-ignore b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/.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/openapi3/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/FILES b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..0616dc9030d343b2657b8f7625377a7976461714
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/FILES
@@ -0,0 +1,68 @@
+README.md
+pom.xml
+src/main/java/org/openapitools/OpenAPI2SpringBoot.java
+src/main/java/org/openapitools/RFC3339DateFormat.java
+src/main/java/org/openapitools/api/AnotherFakeApi.java
+src/main/java/org/openapitools/api/AnotherFakeApiController.java
+src/main/java/org/openapitools/api/ApiUtil.java
+src/main/java/org/openapitools/api/FakeApi.java
+src/main/java/org/openapitools/api/FakeApiController.java
+src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
+src/main/java/org/openapitools/api/PetApi.java
+src/main/java/org/openapitools/api/PetApiController.java
+src/main/java/org/openapitools/api/StoreApi.java
+src/main/java/org/openapitools/api/StoreApiController.java
+src/main/java/org/openapitools/api/UserApi.java
+src/main/java/org/openapitools/api/UserApiController.java
+src/main/java/org/openapitools/configuration/CustomInstantDeserializer.java
+src/main/java/org/openapitools/configuration/HomeController.java
+src/main/java/org/openapitools/configuration/JacksonConfiguration.java
+src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
+src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
+src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
+src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
+src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
+src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
+src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
+src/main/java/org/openapitools/model/AdditionalPropertiesString.java
+src/main/java/org/openapitools/model/Animal.java
+src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
+src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
+src/main/java/org/openapitools/model/ArrayTest.java
+src/main/java/org/openapitools/model/BigCat.java
+src/main/java/org/openapitools/model/BigCatAllOf.java
+src/main/java/org/openapitools/model/Capitalization.java
+src/main/java/org/openapitools/model/Cat.java
+src/main/java/org/openapitools/model/CatAllOf.java
+src/main/java/org/openapitools/model/Category.java
+src/main/java/org/openapitools/model/ClassModel.java
+src/main/java/org/openapitools/model/Client.java
+src/main/java/org/openapitools/model/Dog.java
+src/main/java/org/openapitools/model/DogAllOf.java
+src/main/java/org/openapitools/model/EnumArrays.java
+src/main/java/org/openapitools/model/EnumClass.java
+src/main/java/org/openapitools/model/EnumTest.java
+src/main/java/org/openapitools/model/FileSchemaTestClass.java
+src/main/java/org/openapitools/model/FormatTest.java
+src/main/java/org/openapitools/model/HasOnlyReadOnly.java
+src/main/java/org/openapitools/model/MapTest.java
+src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
+src/main/java/org/openapitools/model/Model200Response.java
+src/main/java/org/openapitools/model/ModelApiResponse.java
+src/main/java/org/openapitools/model/ModelReturn.java
+src/main/java/org/openapitools/model/Name.java
+src/main/java/org/openapitools/model/NumberOnly.java
+src/main/java/org/openapitools/model/Order.java
+src/main/java/org/openapitools/model/OuterComposite.java
+src/main/java/org/openapitools/model/OuterEnum.java
+src/main/java/org/openapitools/model/Pet.java
+src/main/java/org/openapitools/model/ReadOnlyFirst.java
+src/main/java/org/openapitools/model/SpecialModelName.java
+src/main/java/org/openapitools/model/Tag.java
+src/main/java/org/openapitools/model/TypeHolderDefault.java
+src/main/java/org/openapitools/model/TypeHolderExample.java
+src/main/java/org/openapitools/model/User.java
+src/main/java/org/openapitools/model/XmlItem.java
+src/main/resources/application.properties
+src/main/resources/openapi.yaml
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..0984c4c1ad213d3a352049ad557efc9bd5140752
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/README.md b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..befc961488ae17cb2251c0931e29378526fd41ce
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/README.md
@@ -0,0 +1,16 @@
+# OpenAPI generated server
+
+Spring Boot Server
+
+
+## Overview
+This server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
+By using the [OpenAPI-Spec](https://openapis.org), you can easily generate a server stub.
+This is an example of building a OpenAPI-enabled server in Java using the SpringBoot framework.
+
+Start your server as a simple java application
+
+You can view the api documentation in swagger-ui by pointing to
+http://localhost:80/
+
+Change default port value in application.properties
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/pom.xml b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..737d7740cd59a405056909a682275b08535acf47
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/pom.xml
@@ -0,0 +1,67 @@
+<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.openapi3</groupId>
+    <artifactId>spring-boot-beanvalidation-no-nullable</artifactId>
+    <packaging>jar</packaging>
+    <name>spring-boot-beanvalidation-no-nullable</name>
+    <version>1.0.0</version>
+    <properties>
+        <java.version>1.7</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>2.1.11</swagger-core-version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.5.8</version>
+    </parent>
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>${swagger-core-version}</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.github.joschi.jackson</groupId>
+            <artifactId>jackson-datatype-threetenbp</artifactId>
+            <version>2.9.10</version>
+        </dependency>
+        <!-- Bean Validation API support -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/OpenAPI2SpringBoot.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/OpenAPI2SpringBoot.java
new file mode 100644
index 0000000000000000000000000000000000000000..8f6282c8d10f0f04dee47260b96604d982943853
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/OpenAPI2SpringBoot.java
@@ -0,0 +1,59 @@
+package org.openapitools;
+
+import com.fasterxml.jackson.databind.Module;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.ExitCodeGenerator;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+@SpringBootApplication
+@ComponentScan(basePackages = {"org.openapitools", "org.openapitools.api" , "org.openapitools.configuration"})
+public class OpenAPI2SpringBoot implements CommandLineRunner {
+
+    @Override
+    public void run(String... arg0) throws Exception {
+        if (arg0.length > 0 && arg0[0].equals("exitcode")) {
+            throw new ExitException();
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        new SpringApplication(OpenAPI2SpringBoot.class).run(args);
+    }
+
+    static class ExitException extends RuntimeException implements ExitCodeGenerator {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public int getExitCode() {
+            return 10;
+        }
+
+    }
+
+    @Bean
+    public WebMvcConfigurer webConfigurer() {
+        return new WebMvcConfigurerAdapter() {
+            /*@Override
+            public void addCorsMappings(CorsRegistry registry) {
+                registry.addMapping("/**")
+                        .allowedOrigins("*")
+                        .allowedMethods("*")
+                        .allowedHeaders("Content-Type");
+            }*/
+
+            @Override
+            public void addResourceHandlers(ResourceHandlerRegistry registry) {
+                registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/3.14.2/");
+            }
+        };
+    }
+
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/RFC3339DateFormat.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/RFC3339DateFormat.java
new file mode 100644
index 0000000000000000000000000000000000000000..bcd3936d8b343ef7553782b552e9798b69bc5a02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/RFC3339DateFormat.java
@@ -0,0 +1,38 @@
+package org.openapitools;
+
+import com.fasterxml.jackson.databind.util.StdDateFormat;
+
+import java.text.DateFormat;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+public class RFC3339DateFormat extends DateFormat {
+  private static final long serialVersionUID = 1L;
+  private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC");
+
+  private final StdDateFormat fmt = new StdDateFormat()
+          .withTimeZone(TIMEZONE_Z)
+          .withColonInTimeZone(true);
+
+  public RFC3339DateFormat() {
+    this.calendar = new GregorianCalendar();
+  }
+
+  @Override
+  public Date parse(String source, ParsePosition pos) {
+    return fmt.parse(source, pos);
+  }
+
+  @Override
+  public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
+    return fmt.format(date, toAppendTo, fieldPosition);
+  }
+
+  @Override
+  public Object clone() {
+    return this;
+  }
+}
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..81ca2e8ee07c2018be6e5c06a3b308b3c7b3de13
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -0,0 +1,55 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "another-fake", description = "the another-fake API")
+public interface AnotherFakeApi {
+
+    /**
+     * PATCH /another-fake/dummy : To test special tags
+     * To test special tags and operation ID starting with number
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test special tags",
+        tags = { "$another-fake?" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/another-fake/dummy",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    ResponseEntity<Client> call123testSpecialTags(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    );
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApiController.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..7968826328d7fa06a8844347eafa697caf382097
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApiController.java
@@ -0,0 +1,63 @@
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.CookieValue;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.*;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class AnotherFakeApiController implements AnotherFakeApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public AnotherFakeApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    /**
+     * PATCH /another-fake/dummy : To test special tags
+     * To test special tags and operation ID starting with number
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     * @see AnotherFakeApi#call123testSpecialTags
+     */
+    public ResponseEntity<Client> call123testSpecialTags(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    ) {
+        for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"client\" : \"client\" }";
+                ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                break;
+            }
+        }
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/ApiUtil.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/ApiUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..1245b1dd0ccf3cae51824d69fe4074d9acb576df
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/ApiUtil.java
@@ -0,0 +1,19 @@
+package org.openapitools.api;
+
+import org.springframework.web.context.request.NativeWebRequest;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class ApiUtil {
+    public static void setExampleResponse(NativeWebRequest req, String contentType, String example) {
+        try {
+            HttpServletResponse res = req.getNativeResponse(HttpServletResponse.class);
+            res.setCharacterEncoding("UTF-8");
+            res.addHeader("Content-Type", contentType);
+            res.getWriter().print(example);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..d634215d030bd9e499d3ce70cb745cfce348f1e7
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java
@@ -0,0 +1,471 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.math.BigDecimal;
+import org.openapitools.model.Client;
+import org.openapitools.model.FileSchemaTestClass;
+import org.threeten.bp.LocalDate;
+import java.util.Map;
+import org.openapitools.model.ModelApiResponse;
+import org.threeten.bp.OffsetDateTime;
+import org.openapitools.model.OuterComposite;
+import org.openapitools.model.User;
+import org.openapitools.model.XmlItem;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "fake", description = "the fake API")
+public interface FakeApi {
+
+    /**
+     * POST /fake/create_xml_item : creates an XmlItem
+     * this route creates an XmlItem
+     *
+     * @param xmlItem XmlItem Body (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "creates an XmlItem",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/create_xml_item",
+        consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
+    )
+    ResponseEntity<Void> createXmlItem(
+        @Parameter(name = "XmlItem", description = "XmlItem Body", required = true, schema = @Schema(description = "")) @Valid @RequestBody XmlItem xmlItem
+    );
+
+
+    /**
+     * POST /fake/outer/boolean
+     * Test serialization of outer boolean types
+     *
+     * @param body Input boolean as post body (optional)
+     * @return Output boolean (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output boolean", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Boolean.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/boolean",
+        produces = { "*/*" }
+    )
+    ResponseEntity<Boolean> fakeOuterBooleanSerialize(
+        @Parameter(name = "body", description = "Input boolean as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) Boolean body
+    );
+
+
+    /**
+     * POST /fake/outer/composite
+     * Test serialization of object with outer number type
+     *
+     * @param body Input composite as post body (optional)
+     * @return Output composite (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output composite", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  OuterComposite.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/composite",
+        produces = { "*/*" }
+    )
+    ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
+        @Parameter(name = "body", description = "Input composite as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) OuterComposite body
+    );
+
+
+    /**
+     * POST /fake/outer/number
+     * Test serialization of outer number types
+     *
+     * @param body Input number as post body (optional)
+     * @return Output number (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output number", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  BigDecimal.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/number",
+        produces = { "*/*" }
+    )
+    ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
+        @Parameter(name = "body", description = "Input number as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) BigDecimal body
+    );
+
+
+    /**
+     * POST /fake/outer/string
+     * Test serialization of outer string types
+     *
+     * @param body Input string as post body (optional)
+     * @return Output string (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output string", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/string",
+        produces = { "*/*" }
+    )
+    ResponseEntity<String> fakeOuterStringSerialize(
+        @Parameter(name = "body", description = "Input string as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) String body
+    );
+
+
+    /**
+     * PUT /fake/body-with-file-schema
+     * For this test, the body for this request much reference a schema named &#x60;File&#x60;.
+     *
+     * @param body  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/body-with-file-schema",
+        consumes = { "application/json" }
+    )
+    ResponseEntity<Void> testBodyWithFileSchema(
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody FileSchemaTestClass body
+    );
+
+
+    /**
+     * PUT /fake/body-with-query-params
+     *
+     * @param query  (required)
+     * @param body  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/body-with-query-params",
+        consumes = { "application/json" }
+    )
+    ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @Parameter(name = "query", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "query", required = true) String query,
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    );
+
+
+    /**
+     * PATCH /fake : To test \&quot;client\&quot; model
+     * To test \&quot;client\&quot; model
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test \"client\" model",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/fake",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    ResponseEntity<Client> testClientModel(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    );
+
+
+    /**
+     * POST /fake : Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     * Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     *
+     * @param number None (required)
+     * @param _double None (required)
+     * @param patternWithoutDelimiter None (required)
+     * @param _byte None (required)
+     * @param integer None (optional)
+     * @param int32 None (optional)
+     * @param int64 None (optional)
+     * @param _float None (optional)
+     * @param string None (optional)
+     * @param binary None (optional)
+     * @param date None (optional)
+     * @param dateTime None (optional)
+     * @param password None (optional)
+     * @param paramCallback None (optional)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        },
+        security = {
+            @SecurityRequirement(name = "http_basic_test")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    ResponseEntity<Void> testEndpointParameters(
+        @Parameter(name = "number", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @Parameter(name = "double", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @Parameter(name = "pattern_without_delimiter", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @Parameter(name = "byte", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @Parameter(name = "integer", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @Parameter(name = "int32", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @Parameter(name = "int64", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @Parameter(name = "float", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "float", required = false) Float _float,
+        @Parameter(name = "string", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "string", required = false) String string,
+        @Parameter(name = "binary", description = "None", schema = @Schema(description = "")) @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @Parameter(name = "date", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @Parameter(name = "dateTime", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @Parameter(name = "password", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "password", required = false) String password,
+        @Parameter(name = "callback", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    );
+
+
+    /**
+     * GET /fake : To test enum parameters
+     * To test enum parameters
+     *
+     * @param enumHeaderStringArray Header parameter enum test (string array) (optional)
+     * @param enumHeaderString Header parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryStringArray Query parameter enum test (string array) (optional)
+     * @param enumQueryString Query parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryInteger Query parameter enum test (double) (optional)
+     * @param enumQueryDouble Query parameter enum test (double) (optional)
+     * @param enumFormStringArray Form parameter enum test (string array) (optional, default to $)
+     * @param enumFormString Form parameter enum test (string) (optional, default to -efg)
+     * @return Invalid request (status code 400)
+     *         or Not found (status code 404)
+     */
+    @Operation(
+        summary = "To test enum parameters",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid request"),
+            @ApiResponse(responseCode = "404", description = "Not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/fake",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    ResponseEntity<Void> testEnumParameters(
+        @Parameter(name = "enum_header_string_array", description = "Header parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @Parameter(name = "enum_header_string", description = "Header parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @Parameter(name = "enum_query_string_array", description = "Query parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @Parameter(name = "enum_query_string", description = "Query parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @Parameter(name = "enum_query_integer", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1", "-2" })) @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @Parameter(name = "enum_query_double", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1.1", "-1.2" })) @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @Parameter(name = "enum_form_string_array", description = "Form parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @Parameter(name = "enum_form_string", description = "Form parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    );
+
+
+    /**
+     * DELETE /fake : Fake endpoint to test group parameters (optional)
+     * Fake endpoint to test group parameters (optional)
+     *
+     * @param requiredStringGroup Required String in group parameters (required)
+     * @param requiredBooleanGroup Required Boolean in group parameters (required)
+     * @param requiredInt64Group Required Integer in group parameters (required)
+     * @param stringGroup String in group parameters (optional)
+     * @param booleanGroup Boolean in group parameters (optional)
+     * @param int64Group Integer in group parameters (optional)
+     * @return Someting wrong (status code 400)
+     */
+    @Operation(
+        summary = "Fake endpoint to test group parameters (optional)",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Someting wrong")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/fake"
+    )
+    ResponseEntity<Void> testGroupParameters(
+        @NotNull @Parameter(name = "required_string_group", description = "Required String in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @Parameter(name = "required_boolean_group", description = "Required Boolean in group parameters", required = true, schema = @Schema(description = "")) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @Parameter(name = "required_int64_group", description = "Required Integer in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @Parameter(name = "string_group", description = "String in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @Parameter(name = "boolean_group", description = "Boolean in group parameters", schema = @Schema(description = "")) @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @Parameter(name = "int64_group", description = "Integer in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    );
+
+
+    /**
+     * POST /fake/inline-additionalProperties : test inline additionalProperties
+     *
+     * @param param request body (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "test inline additionalProperties",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/inline-additionalProperties",
+        consumes = { "application/json" }
+    )
+    ResponseEntity<Void> testInlineAdditionalProperties(
+        @Parameter(name = "param", description = "request body", required = true, schema = @Schema(description = "")) @Valid @RequestBody Map<String, String> param
+    );
+
+
+    /**
+     * GET /fake/jsonFormData : test json serialization of form data
+     *
+     * @param param field1 (required)
+     * @param param2 field2 (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "test json serialization of form data",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/fake/jsonFormData",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    ResponseEntity<Void> testJsonFormData(
+        @Parameter(name = "param", description = "field1", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "param", required = true) String param,
+        @Parameter(name = "param2", description = "field2", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "param2", required = true) String param2
+    );
+
+
+    /**
+     * PUT /fake/test-query-parameters
+     * To test the collection format in query parameters
+     *
+     * @param pipe  (required)
+     * @param ioutil  (required)
+     * @param http  (required)
+     * @param url  (required)
+     * @param context  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/test-query-parameters"
+    )
+    ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @Parameter(name = "pipe", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @Parameter(name = "ioutil", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @Parameter(name = "http", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @Parameter(name = "url", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @Parameter(name = "context", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "context", required = true) List<String> context
+    );
+
+
+    /**
+     * POST /fake/{petId}/uploadImageWithRequiredFile : uploads an image (required)
+     *
+     * @param petId ID of pet to update (required)
+     * @param requiredFile file to upload (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image (required)",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/{petId}/uploadImageWithRequiredFile",
+        produces = { "application/json" },
+        consumes = { "multipart/form-data" }
+    )
+    ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "requiredFile", description = "file to upload", required = true, schema = @Schema(description = "")) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    );
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApiController.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..362ff5ff5e3a7a7c8d8b96469ffba1b21fdf1d2f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApiController.java
@@ -0,0 +1,360 @@
+package org.openapitools.api;
+
+import java.math.BigDecimal;
+import org.openapitools.model.Client;
+import org.openapitools.model.FileSchemaTestClass;
+import org.threeten.bp.LocalDate;
+import java.util.Map;
+import org.openapitools.model.ModelApiResponse;
+import org.threeten.bp.OffsetDateTime;
+import org.openapitools.model.OuterComposite;
+import org.openapitools.model.User;
+import org.openapitools.model.XmlItem;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.CookieValue;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.*;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class FakeApiController implements FakeApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public FakeApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    /**
+     * POST /fake/create_xml_item : creates an XmlItem
+     * this route creates an XmlItem
+     *
+     * @param xmlItem XmlItem Body (required)
+     * @return successful operation (status code 200)
+     * @see FakeApi#createXmlItem
+     */
+    public ResponseEntity<Void> createXmlItem(
+        @Parameter(name = "XmlItem", description = "XmlItem Body", required = true, schema = @Schema(description = "")) @Valid @RequestBody XmlItem xmlItem
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake/outer/boolean
+     * Test serialization of outer boolean types
+     *
+     * @param body Input boolean as post body (optional)
+     * @return Output boolean (status code 200)
+     * @see FakeApi#fakeOuterBooleanSerialize
+     */
+    public ResponseEntity<Boolean> fakeOuterBooleanSerialize(
+        @Parameter(name = "body", description = "Input boolean as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) Boolean body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake/outer/composite
+     * Test serialization of object with outer number type
+     *
+     * @param body Input composite as post body (optional)
+     * @return Output composite (status code 200)
+     * @see FakeApi#fakeOuterCompositeSerialize
+     */
+    public ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
+        @Parameter(name = "body", description = "Input composite as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) OuterComposite body
+    ) {
+        for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
+                String exampleString = "{ \"my_string\" : \"my_string\", \"my_number\" : 0.8008281904610115, \"my_boolean\" : true }";
+                ApiUtil.setExampleResponse(request, "*/*", exampleString);
+                break;
+            }
+        }
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake/outer/number
+     * Test serialization of outer number types
+     *
+     * @param body Input number as post body (optional)
+     * @return Output number (status code 200)
+     * @see FakeApi#fakeOuterNumberSerialize
+     */
+    public ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
+        @Parameter(name = "body", description = "Input number as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) BigDecimal body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake/outer/string
+     * Test serialization of outer string types
+     *
+     * @param body Input string as post body (optional)
+     * @return Output string (status code 200)
+     * @see FakeApi#fakeOuterStringSerialize
+     */
+    public ResponseEntity<String> fakeOuterStringSerialize(
+        @Parameter(name = "body", description = "Input string as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) String body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * PUT /fake/body-with-file-schema
+     * For this test, the body for this request much reference a schema named &#x60;File&#x60;.
+     *
+     * @param body  (required)
+     * @return Success (status code 200)
+     * @see FakeApi#testBodyWithFileSchema
+     */
+    public ResponseEntity<Void> testBodyWithFileSchema(
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody FileSchemaTestClass body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * PUT /fake/body-with-query-params
+     *
+     * @param query  (required)
+     * @param body  (required)
+     * @return Success (status code 200)
+     * @see FakeApi#testBodyWithQueryParams
+     */
+    public ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @Parameter(name = "query", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "query", required = true) String query,
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * PATCH /fake : To test \&quot;client\&quot; model
+     * To test \&quot;client\&quot; model
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     * @see FakeApi#testClientModel
+     */
+    public ResponseEntity<Client> testClientModel(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    ) {
+        for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"client\" : \"client\" }";
+                ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                break;
+            }
+        }
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake : Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     * Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     *
+     * @param number None (required)
+     * @param _double None (required)
+     * @param patternWithoutDelimiter None (required)
+     * @param _byte None (required)
+     * @param integer None (optional)
+     * @param int32 None (optional)
+     * @param int64 None (optional)
+     * @param _float None (optional)
+     * @param string None (optional)
+     * @param binary None (optional)
+     * @param date None (optional)
+     * @param dateTime None (optional)
+     * @param password None (optional)
+     * @param paramCallback None (optional)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     * @see FakeApi#testEndpointParameters
+     */
+    public ResponseEntity<Void> testEndpointParameters(
+        @Parameter(name = "number", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @Parameter(name = "double", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @Parameter(name = "pattern_without_delimiter", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @Parameter(name = "byte", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @Parameter(name = "integer", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @Parameter(name = "int32", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @Parameter(name = "int64", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @Parameter(name = "float", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "float", required = false) Float _float,
+        @Parameter(name = "string", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "string", required = false) String string,
+        @Parameter(name = "binary", description = "None", schema = @Schema(description = "")) @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @Parameter(name = "date", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @Parameter(name = "dateTime", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @Parameter(name = "password", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "password", required = false) String password,
+        @Parameter(name = "callback", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /fake : To test enum parameters
+     * To test enum parameters
+     *
+     * @param enumHeaderStringArray Header parameter enum test (string array) (optional)
+     * @param enumHeaderString Header parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryStringArray Query parameter enum test (string array) (optional)
+     * @param enumQueryString Query parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryInteger Query parameter enum test (double) (optional)
+     * @param enumQueryDouble Query parameter enum test (double) (optional)
+     * @param enumFormStringArray Form parameter enum test (string array) (optional, default to $)
+     * @param enumFormString Form parameter enum test (string) (optional, default to -efg)
+     * @return Invalid request (status code 400)
+     *         or Not found (status code 404)
+     * @see FakeApi#testEnumParameters
+     */
+    public ResponseEntity<Void> testEnumParameters(
+        @Parameter(name = "enum_header_string_array", description = "Header parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @Parameter(name = "enum_header_string", description = "Header parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @Parameter(name = "enum_query_string_array", description = "Query parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @Parameter(name = "enum_query_string", description = "Query parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @Parameter(name = "enum_query_integer", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1", "-2" })) @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @Parameter(name = "enum_query_double", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1.1", "-1.2" })) @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @Parameter(name = "enum_form_string_array", description = "Form parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @Parameter(name = "enum_form_string", description = "Form parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * DELETE /fake : Fake endpoint to test group parameters (optional)
+     * Fake endpoint to test group parameters (optional)
+     *
+     * @param requiredStringGroup Required String in group parameters (required)
+     * @param requiredBooleanGroup Required Boolean in group parameters (required)
+     * @param requiredInt64Group Required Integer in group parameters (required)
+     * @param stringGroup String in group parameters (optional)
+     * @param booleanGroup Boolean in group parameters (optional)
+     * @param int64Group Integer in group parameters (optional)
+     * @return Someting wrong (status code 400)
+     * @see FakeApi#testGroupParameters
+     */
+    public ResponseEntity<Void> testGroupParameters(
+        @NotNull @Parameter(name = "required_string_group", description = "Required String in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @Parameter(name = "required_boolean_group", description = "Required Boolean in group parameters", required = true, schema = @Schema(description = "")) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @Parameter(name = "required_int64_group", description = "Required Integer in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @Parameter(name = "string_group", description = "String in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @Parameter(name = "boolean_group", description = "Boolean in group parameters", schema = @Schema(description = "")) @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @Parameter(name = "int64_group", description = "Integer in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake/inline-additionalProperties : test inline additionalProperties
+     *
+     * @param param request body (required)
+     * @return successful operation (status code 200)
+     * @see FakeApi#testInlineAdditionalProperties
+     */
+    public ResponseEntity<Void> testInlineAdditionalProperties(
+        @Parameter(name = "param", description = "request body", required = true, schema = @Schema(description = "")) @Valid @RequestBody Map<String, String> param
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /fake/jsonFormData : test json serialization of form data
+     *
+     * @param param field1 (required)
+     * @param param2 field2 (required)
+     * @return successful operation (status code 200)
+     * @see FakeApi#testJsonFormData
+     */
+    public ResponseEntity<Void> testJsonFormData(
+        @Parameter(name = "param", description = "field1", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "param", required = true) String param,
+        @Parameter(name = "param2", description = "field2", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * PUT /fake/test-query-parameters
+     * To test the collection format in query parameters
+     *
+     * @param pipe  (required)
+     * @param ioutil  (required)
+     * @param http  (required)
+     * @param url  (required)
+     * @param context  (required)
+     * @return Success (status code 200)
+     * @see FakeApi#testQueryParameterCollectionFormat
+     */
+    public ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @Parameter(name = "pipe", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @Parameter(name = "ioutil", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @Parameter(name = "http", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @Parameter(name = "url", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @Parameter(name = "context", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake/{petId}/uploadImageWithRequiredFile : uploads an image (required)
+     *
+     * @param petId ID of pet to update (required)
+     * @param requiredFile file to upload (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @return successful operation (status code 200)
+     * @see FakeApi#uploadFileWithRequiredFile
+     */
+    public ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "requiredFile", description = "file to upload", required = true, schema = @Schema(description = "")) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
+        for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
+                ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                break;
+            }
+        }
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..5f640ca78deb6fc8ac11c6be18d48bace9d44a57
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -0,0 +1,58 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "fake_classname_test", description = "the fake_classname_test API")
+public interface FakeClassnameTestApi {
+
+    /**
+     * PATCH /fake_classname_test : To test class name in snake case
+     * To test class name in snake case
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test class name in snake case",
+        tags = { "fake_classname_tags 123#$%^" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key_query")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/fake_classname_test",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    ResponseEntity<Client> testClassname(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    );
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f416d5ab25f332399022ac9b4f092ea2d62890a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
@@ -0,0 +1,63 @@
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.CookieValue;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.*;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class FakeClassnameTestApiController implements FakeClassnameTestApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public FakeClassnameTestApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    /**
+     * PATCH /fake_classname_test : To test class name in snake case
+     * To test class name in snake case
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     * @see FakeClassnameTestApi#testClassname
+     */
+    public ResponseEntity<Client> testClassname(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    ) {
+        for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"client\" : \"client\" }";
+                ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                break;
+            }
+        }
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..d4cbbab6f7b1e634701e7cb8e046004bf8ed090f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java
@@ -0,0 +1,272 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.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 java.util.Set;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "pet", description = "the pet API")
+public interface PetApi {
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Add a new pet to the store",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet",
+        consumes = { "application/json", "application/xml" }
+    )
+    ResponseEntity<Void> addPet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    );
+
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @param apiKey  (optional)
+     * @return successful operation (status code 200)
+     *         or Invalid pet value (status code 400)
+     */
+    @Operation(
+        summary = "Deletes a pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "400", description = "Invalid pet value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/pet/{petId}"
+    )
+    ResponseEntity<Void> deletePet(
+        @Parameter(name = "petId", description = "Pet id to delete", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "api_key", description = "", schema = @Schema(description = "")) @RequestHeader(value = "api_key", required = false) String apiKey
+    );
+
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     */
+    @Operation(
+        summary = "Finds Pets by status",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid status value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByStatus",
+        produces = { "application/xml", "application/json" }
+    )
+    ResponseEntity<List<Pet>> findPetsByStatus(
+        @NotNull @Parameter(name = "status", description = "Status values that need to be considered for filter", required = true, schema = @Schema(description = "", allowableValues = { "available", "pending", "sold" })) @Valid @RequestParam(value = "status", required = true) List<String> status
+    );
+
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     */
+    @Operation(
+        summary = "Finds Pets by tags",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid tag value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByTags",
+        produces = { "application/xml", "application/json" }
+    )
+    ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @Parameter(name = "tags", description = "Tags to filter by", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    );
+
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     */
+    @Operation(
+        summary = "Find pet by ID",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/{petId}",
+        produces = { "application/xml", "application/json" }
+    )
+    ResponseEntity<Pet> getPetById(
+        @Parameter(name = "petId", description = "ID of pet to return", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId
+    );
+
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     */
+    @Operation(
+        summary = "Update an existing pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found"),
+            @ApiResponse(responseCode = "405", description = "Validation exception")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/pet",
+        consumes = { "application/json", "application/xml" }
+    )
+    ResponseEntity<Void> updatePet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    );
+
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Updates a pet in the store with form data",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    ResponseEntity<Void> updatePetWithForm(
+        @Parameter(name = "petId", description = "ID of pet that needs to be updated", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "name", description = "Updated name of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "name", required = false) String name,
+        @Parameter(name = "status", description = "Updated status of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "status", required = false) String status
+    );
+
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}/uploadImage",
+        produces = { "application/json" },
+        consumes = { "multipart/form-data" }
+    )
+    ResponseEntity<ModelApiResponse> uploadFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @Parameter(name = "file", description = "file to upload", schema = @Schema(description = "")) @RequestPart(value = "file", required = false) MultipartFile file
+    );
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApiController.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..47d4ffcdb9d963bb68b068b9c2e7ef974005359e
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApiController.java
@@ -0,0 +1,221 @@
+package org.openapitools.api;
+
+import org.openapitools.model.ModelApiResponse;
+import org.openapitools.model.Pet;
+import java.util.Set;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.CookieValue;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.*;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class PetApiController implements PetApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public PetApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid input (status code 405)
+     * @see PetApi#addPet
+     */
+    public ResponseEntity<Void> addPet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @param apiKey  (optional)
+     * @return successful operation (status code 200)
+     *         or Invalid pet value (status code 400)
+     * @see PetApi#deletePet
+     */
+    public ResponseEntity<Void> deletePet(
+        @Parameter(name = "petId", description = "Pet id to delete", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "api_key", description = "", schema = @Schema(description = "")) @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     * @see PetApi#findPetsByStatus
+     */
+    public ResponseEntity<List<Pet>> findPetsByStatus(
+        @NotNull @Parameter(name = "status", description = "Status values that need to be considered for filter", required = true, schema = @Schema(description = "", allowableValues = { "available", "pending", "sold" })) @Valid @RequestParam(value = "status", required = true) List<String> status
+    ) {
+        for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                break;
+            }
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                break;
+            }
+        }
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     * @see PetApi#findPetsByTags
+     */
+    public ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @Parameter(name = "tags", description = "Tags to filter by", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
+        for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                break;
+            }
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                break;
+            }
+        }
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     * @see PetApi#getPetById
+     */
+    public ResponseEntity<Pet> getPetById(
+        @Parameter(name = "petId", description = "ID of pet to return", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId
+    ) {
+        for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                break;
+            }
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                break;
+            }
+        }
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     * @see PetApi#updatePet
+     */
+    public ResponseEntity<Void> updatePet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     * @see PetApi#updatePetWithForm
+     */
+    public ResponseEntity<Void> updatePetWithForm(
+        @Parameter(name = "petId", description = "ID of pet that needs to be updated", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "name", description = "Updated name of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "name", required = false) String name,
+        @Parameter(name = "status", description = "Updated status of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "status", required = false) String status
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     * @see PetApi#uploadFile
+     */
+    public ResponseEntity<ModelApiResponse> uploadFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @Parameter(name = "file", description = "file to upload", schema = @Schema(description = "")) @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
+        for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
+                ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                break;
+            }
+        }
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..26389c13ef5846b5b1cb765eff92c76e46598089
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java
@@ -0,0 +1,135 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.Map;
+import org.openapitools.model.Order;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "store", description = "the store API")
+public interface StoreApi {
+
+    /**
+     * DELETE /store/order/{order_id} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/store/order/{order_id}"
+    )
+    ResponseEntity<Void> deleteOrder(
+        @Parameter(name = "order_id", description = "ID of the order that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("order_id") String orderId
+    );
+
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Returns pet inventories by status",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Map.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/inventory",
+        produces = { "application/json" }
+    )
+    ResponseEntity<Map<String, Integer>> getInventory(
+        
+    );
+
+
+    /**
+     * GET /store/order/{order_id} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Find purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/order/{order_id}",
+        produces = { "application/xml", "application/json" }
+    )
+    ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @Parameter(name = "order_id", description = "ID of pet that needs to be fetched", required = true, schema = @Schema(description = "")) @PathVariable("order_id") Long orderId
+    );
+
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param body order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     */
+    @Operation(
+        summary = "Place an order for a pet",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid Order")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/store/order",
+        produces = { "application/xml", "application/json" }
+    )
+    ResponseEntity<Order> placeOrder(
+        @Parameter(name = "body", description = "order placed for purchasing the pet", required = true, schema = @Schema(description = "")) @Valid @RequestBody Order body
+    );
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApiController.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..91b88d0652f3f5ea5a035233aae7e3161bb83d35
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApiController.java
@@ -0,0 +1,128 @@
+package org.openapitools.api;
+
+import java.util.Map;
+import org.openapitools.model.Order;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.CookieValue;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.*;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class StoreApiController implements StoreApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public StoreApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    /**
+     * DELETE /store/order/{order_id} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     * @see StoreApi#deleteOrder
+     */
+    public ResponseEntity<Void> deleteOrder(
+        @Parameter(name = "order_id", description = "ID of the order that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("order_id") String orderId
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     * @see StoreApi#getInventory
+     */
+    public ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /store/order/{order_id} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     * @see StoreApi#getOrderById
+     */
+    public ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @Parameter(name = "order_id", description = "ID of pet that needs to be fetched", required = true, schema = @Schema(description = "")) @PathVariable("order_id") Long orderId
+    ) {
+        for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
+                ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                break;
+            }
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                String exampleString = "<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>";
+                ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                break;
+            }
+        }
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param body order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     * @see StoreApi#placeOrder
+     */
+    public ResponseEntity<Order> placeOrder(
+        @Parameter(name = "body", description = "order placed for purchasing the pet", required = true, schema = @Schema(description = "")) @Valid @RequestBody Order body
+    ) {
+        for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
+                ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                break;
+            }
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                String exampleString = "<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>";
+                ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                break;
+            }
+        }
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..3cdc6eeed91957989496441caea46d4cacab1311
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java
@@ -0,0 +1,226 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.List;
+import org.threeten.bp.OffsetDateTime;
+import org.openapitools.model.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "user", description = "the user API")
+public interface UserApi {
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param body Created user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Create user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user"
+    )
+    ResponseEntity<Void> createUser(
+        @Parameter(name = "body", description = "Created user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    );
+
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithArray"
+    )
+    ResponseEntity<Void> createUsersWithArrayInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    );
+
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithList"
+    )
+    ResponseEntity<Void> createUsersWithListInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    );
+
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/user/{username}"
+    )
+    ResponseEntity<Void> deleteUser(
+        @Parameter(name = "username", description = "The name that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    );
+
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Get user by user name",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  User.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/{username}",
+        produces = { "application/xml", "application/json" }
+    )
+    ResponseEntity<User> getUserByName(
+        @Parameter(name = "username", description = "The name that needs to be fetched. Use user1 for testing.", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    );
+
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     */
+    @Operation(
+        summary = "Logs user into the system",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username/password supplied")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/login",
+        produces = { "application/xml", "application/json" }
+    )
+    ResponseEntity<String> loginUser(
+        @NotNull @Parameter(name = "username", description = "The user name for login", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @Parameter(name = "password", description = "The password for login in clear text", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "password", required = true) String password
+    );
+
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Logs out current logged in user session",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/logout"
+    )
+    ResponseEntity<Void> logoutUser(
+        
+    );
+
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param body Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Updated user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid user supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/user/{username}"
+    )
+    ResponseEntity<Void> updateUser(
+        @Parameter(name = "username", description = "name that need to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(name = "body", description = "Updated user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    );
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApiController.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..c77024353b9c45a7f6a7dbee95d0e05539c15173
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApiController.java
@@ -0,0 +1,178 @@
+package org.openapitools.api;
+
+import java.util.List;
+import org.threeten.bp.OffsetDateTime;
+import org.openapitools.model.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.CookieValue;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.*;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class UserApiController implements UserApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public UserApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param body Created user object (required)
+     * @return successful operation (status code 200)
+     * @see UserApi#createUser
+     */
+    public ResponseEntity<Void> createUser(
+        @Parameter(name = "body", description = "Created user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     * @see UserApi#createUsersWithArrayInput
+     */
+    public ResponseEntity<Void> createUsersWithArrayInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     * @see UserApi#createUsersWithListInput
+     */
+    public ResponseEntity<Void> createUsersWithListInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     * @see UserApi#deleteUser
+     */
+    public ResponseEntity<Void> deleteUser(
+        @Parameter(name = "username", description = "The name that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     * @see UserApi#getUserByName
+     */
+    public ResponseEntity<User> getUserByName(
+        @Parameter(name = "username", description = "The name that needs to be fetched. Use user1 for testing.", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    ) {
+        for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"firstName\" : \"firstName\", \"lastName\" : \"lastName\", \"password\" : \"password\", \"userStatus\" : 6, \"phone\" : \"phone\", \"id\" : 0, \"email\" : \"email\", \"username\" : \"username\" }";
+                ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                break;
+            }
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                String exampleString = "<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>";
+                ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                break;
+            }
+        }
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     * @see UserApi#loginUser
+     */
+    public ResponseEntity<String> loginUser(
+        @NotNull @Parameter(name = "username", description = "The user name for login", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @Parameter(name = "password", description = "The password for login in clear text", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     * @see UserApi#logoutUser
+     */
+    public ResponseEntity<Void> logoutUser(
+        
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param body Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     * @see UserApi#updateUser
+     */
+    public ResponseEntity<Void> updateUser(
+        @Parameter(name = "username", description = "name that need to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(name = "body", description = "Updated user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/configuration/CustomInstantDeserializer.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/configuration/CustomInstantDeserializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..8f936b311447170d86888a459196532ba3fb9411
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/configuration/CustomInstantDeserializer.java
@@ -0,0 +1,232 @@
+package org.openapitools.configuration;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonTokenId;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.datatype.threetenbp.DecimalUtils;
+import com.fasterxml.jackson.datatype.threetenbp.deser.ThreeTenDateTimeDeserializerBase;
+import com.fasterxml.jackson.datatype.threetenbp.function.BiFunction;
+import com.fasterxml.jackson.datatype.threetenbp.function.Function;
+import org.threeten.bp.DateTimeException;
+import org.threeten.bp.DateTimeUtils;
+import org.threeten.bp.Instant;
+import org.threeten.bp.OffsetDateTime;
+import org.threeten.bp.ZoneId;
+import org.threeten.bp.ZonedDateTime;
+import org.threeten.bp.format.DateTimeFormatter;
+import org.threeten.bp.temporal.Temporal;
+import org.threeten.bp.temporal.TemporalAccessor;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+
+/**
+ * Deserializer for ThreeTen temporal {@link Instant}s, {@link OffsetDateTime}, and {@link ZonedDateTime}s.
+ * Adapted from the jackson threetenbp InstantDeserializer to add support for deserializing rfc822 format.
+ *
+ * @author Nick Williams
+ */
+public class CustomInstantDeserializer<T extends Temporal>
+    extends ThreeTenDateTimeDeserializerBase<T> {
+  private static final long serialVersionUID = 1L;
+
+  public static final CustomInstantDeserializer<Instant> INSTANT = new CustomInstantDeserializer<Instant>(
+      Instant.class, DateTimeFormatter.ISO_INSTANT,
+      new Function<TemporalAccessor, Instant>() {
+        @Override
+        public Instant apply(TemporalAccessor temporalAccessor) {
+          return Instant.from(temporalAccessor);
+        }
+      },
+      new Function<FromIntegerArguments, Instant>() {
+        @Override
+        public Instant apply(FromIntegerArguments a) {
+          return Instant.ofEpochMilli(a.value);
+        }
+      },
+      new Function<FromDecimalArguments, Instant>() {
+        @Override
+        public Instant apply(FromDecimalArguments a) {
+          return Instant.ofEpochSecond(a.integer, a.fraction);
+        }
+      },
+      null
+  );
+
+  public static final CustomInstantDeserializer<OffsetDateTime> OFFSET_DATE_TIME = new CustomInstantDeserializer<OffsetDateTime>(
+      OffsetDateTime.class, DateTimeFormatter.ISO_OFFSET_DATE_TIME,
+      new Function<TemporalAccessor, OffsetDateTime>() {
+        @Override
+        public OffsetDateTime apply(TemporalAccessor temporalAccessor) {
+          return OffsetDateTime.from(temporalAccessor);
+        }
+      },
+      new Function<FromIntegerArguments, OffsetDateTime>() {
+        @Override
+        public OffsetDateTime apply(FromIntegerArguments a) {
+          return OffsetDateTime.ofInstant(Instant.ofEpochMilli(a.value), a.zoneId);
+        }
+      },
+      new Function<FromDecimalArguments, OffsetDateTime>() {
+        @Override
+        public OffsetDateTime apply(FromDecimalArguments a) {
+          return OffsetDateTime.ofInstant(Instant.ofEpochSecond(a.integer, a.fraction), a.zoneId);
+        }
+      },
+      new BiFunction<OffsetDateTime, ZoneId, OffsetDateTime>() {
+        @Override
+        public OffsetDateTime apply(OffsetDateTime d, ZoneId z) {
+          return d.withOffsetSameInstant(z.getRules().getOffset(d.toLocalDateTime()));
+        }
+      }
+  );
+
+  public static final CustomInstantDeserializer<ZonedDateTime> ZONED_DATE_TIME = new CustomInstantDeserializer<ZonedDateTime>(
+      ZonedDateTime.class, DateTimeFormatter.ISO_ZONED_DATE_TIME,
+      new Function<TemporalAccessor, ZonedDateTime>() {
+        @Override
+        public ZonedDateTime apply(TemporalAccessor temporalAccessor) {
+          return ZonedDateTime.from(temporalAccessor);
+        }
+      },
+      new Function<FromIntegerArguments, ZonedDateTime>() {
+        @Override
+        public ZonedDateTime apply(FromIntegerArguments a) {
+          return ZonedDateTime.ofInstant(Instant.ofEpochMilli(a.value), a.zoneId);
+        }
+      },
+      new Function<FromDecimalArguments, ZonedDateTime>() {
+        @Override
+        public ZonedDateTime apply(FromDecimalArguments a) {
+          return ZonedDateTime.ofInstant(Instant.ofEpochSecond(a.integer, a.fraction), a.zoneId);
+        }
+      },
+      new BiFunction<ZonedDateTime, ZoneId, ZonedDateTime>() {
+        @Override
+        public ZonedDateTime apply(ZonedDateTime zonedDateTime, ZoneId zoneId) {
+          return zonedDateTime.withZoneSameInstant(zoneId);
+        }
+      }
+  );
+
+  protected final Function<FromIntegerArguments, T> fromMilliseconds;
+
+  protected final Function<FromDecimalArguments, T> fromNanoseconds;
+
+  protected final Function<TemporalAccessor, T> parsedToValue;
+
+  protected final BiFunction<T, ZoneId, T> adjust;
+
+  protected CustomInstantDeserializer(Class<T> supportedType,
+                    DateTimeFormatter parser,
+                    Function<TemporalAccessor, T> parsedToValue,
+                    Function<FromIntegerArguments, T> fromMilliseconds,
+                    Function<FromDecimalArguments, T> fromNanoseconds,
+                    BiFunction<T, ZoneId, T> adjust) {
+    super(supportedType, parser);
+    this.parsedToValue = parsedToValue;
+    this.fromMilliseconds = fromMilliseconds;
+    this.fromNanoseconds = fromNanoseconds;
+    this.adjust = adjust == null ? new BiFunction<T, ZoneId, T>() {
+      @Override
+      public T apply(T t, ZoneId zoneId) {
+        return t;
+      }
+    } : adjust;
+  }
+
+  @SuppressWarnings("unchecked")
+  protected CustomInstantDeserializer(CustomInstantDeserializer<T> base, DateTimeFormatter f) {
+    super((Class<T>) base.handledType(), f);
+    parsedToValue = base.parsedToValue;
+    fromMilliseconds = base.fromMilliseconds;
+    fromNanoseconds = base.fromNanoseconds;
+    adjust = base.adjust;
+  }
+
+  @Override
+  protected JsonDeserializer<T> withDateFormat(DateTimeFormatter dtf) {
+    if (dtf == _formatter) {
+      return this;
+    }
+    return new CustomInstantDeserializer<T>(this, dtf);
+  }
+
+  @Override
+  public T deserialize(JsonParser parser, DeserializationContext context) throws IOException {
+    //NOTE: Timestamps contain no timezone info, and are always in configured TZ. Only
+    //string values have to be adjusted to the configured TZ.
+    switch (parser.getCurrentTokenId()) {
+      case JsonTokenId.ID_NUMBER_FLOAT: {
+        BigDecimal value = parser.getDecimalValue();
+        long seconds = value.longValue();
+        int nanoseconds = DecimalUtils.extractNanosecondDecimal(value, seconds);
+        return fromNanoseconds.apply(new FromDecimalArguments(
+            seconds, nanoseconds, getZone(context)));
+      }
+
+      case JsonTokenId.ID_NUMBER_INT: {
+        long timestamp = parser.getLongValue();
+        if (context.isEnabled(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS)) {
+          return this.fromNanoseconds.apply(new FromDecimalArguments(
+              timestamp, 0, this.getZone(context)
+          ));
+        }
+        return this.fromMilliseconds.apply(new FromIntegerArguments(
+            timestamp, this.getZone(context)
+        ));
+      }
+
+      case JsonTokenId.ID_STRING: {
+        String string = parser.getText().trim();
+        if (string.length() == 0) {
+          return null;
+        }
+        if (string.endsWith("+0000")) {
+          string = string.substring(0, string.length() - 5) + "Z";
+        }
+        T value;
+        try {
+          TemporalAccessor acc = _formatter.parse(string);
+          value = parsedToValue.apply(acc);
+          if (context.isEnabled(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE)) {
+            return adjust.apply(value, this.getZone(context));
+          }
+        } catch (DateTimeException e) {
+          throw _peelDTE(e);
+        }
+        return value;
+      }
+    }
+    throw context.mappingException("Expected type float, integer, or string.");
+  }
+
+  private ZoneId getZone(DeserializationContext context) {
+    // Instants are always in UTC, so don't waste compute cycles
+    return (_valueClass == Instant.class) ? null : DateTimeUtils.toZoneId(context.getTimeZone());
+  }
+
+  private static class FromIntegerArguments {
+    public final long value;
+    public final ZoneId zoneId;
+
+    private FromIntegerArguments(long value, ZoneId zoneId) {
+      this.value = value;
+      this.zoneId = zoneId;
+    }
+  }
+
+  private static class FromDecimalArguments {
+    public final long integer;
+    public final int fraction;
+    public final ZoneId zoneId;
+
+    private FromDecimalArguments(long integer, int fraction, ZoneId zoneId) {
+      this.integer = integer;
+      this.fraction = fraction;
+      this.zoneId = zoneId;
+    }
+  }
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/configuration/HomeController.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/configuration/HomeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..34bae16b8986820eef90212adb88e86fa2db0ea8
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/configuration/HomeController.java
@@ -0,0 +1,53 @@
+package org.openapitools.configuration;
+
+import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.io.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StreamUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+
+/**
+ * Home redirection to OpenAPI api documentation
+ */
+@Controller
+public class HomeController {
+
+    private static YAMLMapper yamlMapper = new YAMLMapper();
+
+    @Value("classpath:/openapi.yaml")
+    private Resource openapi;
+
+    @Bean
+    public String openapiContent() throws IOException {
+        try(InputStream is = openapi.getInputStream()) {
+            return StreamUtils.copyToString(is, Charset.defaultCharset());
+        }
+    }
+
+    @GetMapping(value = "/openapi.yaml", produces = "application/vnd.oai.openapi")
+    @ResponseBody
+    public String openapiYaml() throws IOException {
+        return openapiContent();
+    }
+
+    @GetMapping(value = "/openapi.json", produces = "application/json")
+    @ResponseBody
+    public Object openapiJson() throws IOException {
+        return yamlMapper.readValue(openapiContent(), Object.class);
+    }
+
+    @RequestMapping("/")
+    public String index() {
+        return "redirect:swagger-ui/index.html?url=../openapi.json";
+    }
+
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/configuration/JacksonConfiguration.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/configuration/JacksonConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..b481a87518f45c23be2fd1b314bd25e358acc6cd
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/configuration/JacksonConfiguration.java
@@ -0,0 +1,23 @@
+package org.openapitools.configuration;
+
+import com.fasterxml.jackson.datatype.threetenbp.ThreeTenModule;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.threeten.bp.Instant;
+import org.threeten.bp.OffsetDateTime;
+import org.threeten.bp.ZonedDateTime;
+
+@Configuration
+public class JacksonConfiguration {
+
+  @Bean
+  @ConditionalOnMissingBean(ThreeTenModule.class)
+  ThreeTenModule threeTenModule() {
+    ThreeTenModule module = new ThreeTenModule();
+    module.addDeserializer(Instant.class, CustomInstantDeserializer.INSTANT);
+    module.addDeserializer(OffsetDateTime.class, CustomInstantDeserializer.OFFSET_DATE_TIME);
+    module.addDeserializer(ZonedDateTime.class, CustomInstantDeserializer.ZONED_DATE_TIME);
+    return module;
+  }
+}
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..70f6bb0d1c47ddf60d6450f0dbbbe0d41149df58
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesAnyType
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesAnyType extends HashMap<String, Object>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesAnyType name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesAnyType additionalPropertiesAnyType = (AdditionalPropertiesAnyType) o;
+    return Objects.equals(this.name, additionalPropertiesAnyType.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesAnyType {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
new file mode 100644
index 0000000000000000000000000000000000000000..ceb28401cd5eba8dcc9f2b8a409a5f2a21fd4fb9
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
@@ -0,0 +1,85 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesArray
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesArray extends HashMap<String, List>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesArray name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesArray additionalPropertiesArray = (AdditionalPropertiesArray) o;
+    return Objects.equals(this.name, additionalPropertiesArray.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesArray {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
new file mode 100644
index 0000000000000000000000000000000000000000..9455c14cd5fd56b0e5bc410af1ebeb2706fcd653
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesBoolean
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesBoolean extends HashMap<String, Boolean>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesBoolean name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesBoolean additionalPropertiesBoolean = (AdditionalPropertiesBoolean) o;
+    return Objects.equals(this.name, additionalPropertiesBoolean.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesBoolean {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..69e4ba3737e91558eee44bb383e3dbeb9eeb93f9
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
@@ -0,0 +1,412 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesClass   {
+  @JsonProperty("map_string")
+  @Valid
+  private Map<String, String> mapString = null;
+
+  @JsonProperty("map_number")
+  @Valid
+  private Map<String, BigDecimal> mapNumber = null;
+
+  @JsonProperty("map_integer")
+  @Valid
+  private Map<String, Integer> mapInteger = null;
+
+  @JsonProperty("map_boolean")
+  @Valid
+  private Map<String, Boolean> mapBoolean = null;
+
+  @JsonProperty("map_array_integer")
+  @Valid
+  private Map<String, List<Integer>> mapArrayInteger = null;
+
+  @JsonProperty("map_array_anytype")
+  @Valid
+  private Map<String, List<Object>> mapArrayAnytype = null;
+
+  @JsonProperty("map_map_string")
+  @Valid
+  private Map<String, Map<String, String>> mapMapString = null;
+
+  @JsonProperty("map_map_anytype")
+  @Valid
+  private Map<String, Map<String, Object>> mapMapAnytype = null;
+
+  @JsonProperty("anytype_1")
+  private Object anytype1;
+
+  @JsonProperty("anytype_2")
+  private Object anytype2;
+
+  @JsonProperty("anytype_3")
+  private Object anytype3;
+
+  public AdditionalPropertiesClass mapString(Map<String, String> mapString) {
+    this.mapString = mapString;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapStringItem(String key, String mapStringItem) {
+    if (this.mapString == null) {
+      this.mapString = new HashMap<String, String>();
+    }
+    this.mapString.put(key, mapStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapString
+   * @return mapString
+  */
+  @Schema(name = "mapString", defaultValue = "")
+
+
+  public Map<String, String> getMapString() {
+    return mapString;
+  }
+
+  public void setMapString(Map<String, String> mapString) {
+    this.mapString = mapString;
+  }
+
+  public AdditionalPropertiesClass mapNumber(Map<String, BigDecimal> mapNumber) {
+    this.mapNumber = mapNumber;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapNumberItem(String key, BigDecimal mapNumberItem) {
+    if (this.mapNumber == null) {
+      this.mapNumber = new HashMap<String, BigDecimal>();
+    }
+    this.mapNumber.put(key, mapNumberItem);
+    return this;
+  }
+
+  /**
+   * Get mapNumber
+   * @return mapNumber
+  */
+  @Schema(name = "mapNumber", defaultValue = "")
+
+  @Valid
+
+  public Map<String, BigDecimal> getMapNumber() {
+    return mapNumber;
+  }
+
+  public void setMapNumber(Map<String, BigDecimal> mapNumber) {
+    this.mapNumber = mapNumber;
+  }
+
+  public AdditionalPropertiesClass mapInteger(Map<String, Integer> mapInteger) {
+    this.mapInteger = mapInteger;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapIntegerItem(String key, Integer mapIntegerItem) {
+    if (this.mapInteger == null) {
+      this.mapInteger = new HashMap<String, Integer>();
+    }
+    this.mapInteger.put(key, mapIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get mapInteger
+   * @return mapInteger
+  */
+  @Schema(name = "mapInteger", defaultValue = "")
+
+
+  public Map<String, Integer> getMapInteger() {
+    return mapInteger;
+  }
+
+  public void setMapInteger(Map<String, Integer> mapInteger) {
+    this.mapInteger = mapInteger;
+  }
+
+  public AdditionalPropertiesClass mapBoolean(Map<String, Boolean> mapBoolean) {
+    this.mapBoolean = mapBoolean;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapBooleanItem(String key, Boolean mapBooleanItem) {
+    if (this.mapBoolean == null) {
+      this.mapBoolean = new HashMap<String, Boolean>();
+    }
+    this.mapBoolean.put(key, mapBooleanItem);
+    return this;
+  }
+
+  /**
+   * Get mapBoolean
+   * @return mapBoolean
+  */
+  @Schema(name = "mapBoolean", defaultValue = "")
+
+
+  public Map<String, Boolean> getMapBoolean() {
+    return mapBoolean;
+  }
+
+  public void setMapBoolean(Map<String, Boolean> mapBoolean) {
+    this.mapBoolean = mapBoolean;
+  }
+
+  public AdditionalPropertiesClass mapArrayInteger(Map<String, List<Integer>> mapArrayInteger) {
+    this.mapArrayInteger = mapArrayInteger;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapArrayIntegerItem(String key, List<Integer> mapArrayIntegerItem) {
+    if (this.mapArrayInteger == null) {
+      this.mapArrayInteger = new HashMap<String, List<Integer>>();
+    }
+    this.mapArrayInteger.put(key, mapArrayIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get mapArrayInteger
+   * @return mapArrayInteger
+  */
+  @Schema(name = "mapArrayInteger", defaultValue = "")
+
+  @Valid
+
+  public Map<String, List<Integer>> getMapArrayInteger() {
+    return mapArrayInteger;
+  }
+
+  public void setMapArrayInteger(Map<String, List<Integer>> mapArrayInteger) {
+    this.mapArrayInteger = mapArrayInteger;
+  }
+
+  public AdditionalPropertiesClass mapArrayAnytype(Map<String, List<Object>> mapArrayAnytype) {
+    this.mapArrayAnytype = mapArrayAnytype;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapArrayAnytypeItem(String key, List<Object> mapArrayAnytypeItem) {
+    if (this.mapArrayAnytype == null) {
+      this.mapArrayAnytype = new HashMap<String, List<Object>>();
+    }
+    this.mapArrayAnytype.put(key, mapArrayAnytypeItem);
+    return this;
+  }
+
+  /**
+   * Get mapArrayAnytype
+   * @return mapArrayAnytype
+  */
+  @Schema(name = "mapArrayAnytype", defaultValue = "")
+
+  @Valid
+
+  public Map<String, List<Object>> getMapArrayAnytype() {
+    return mapArrayAnytype;
+  }
+
+  public void setMapArrayAnytype(Map<String, List<Object>> mapArrayAnytype) {
+    this.mapArrayAnytype = mapArrayAnytype;
+  }
+
+  public AdditionalPropertiesClass mapMapString(Map<String, Map<String, String>> mapMapString) {
+    this.mapMapString = mapMapString;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapMapStringItem(String key, Map<String, String> mapMapStringItem) {
+    if (this.mapMapString == null) {
+      this.mapMapString = new HashMap<String, Map<String, String>>();
+    }
+    this.mapMapString.put(key, mapMapStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapString
+   * @return mapMapString
+  */
+  @Schema(name = "mapMapString", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, String>> getMapMapString() {
+    return mapMapString;
+  }
+
+  public void setMapMapString(Map<String, Map<String, String>> mapMapString) {
+    this.mapMapString = mapMapString;
+  }
+
+  public AdditionalPropertiesClass mapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
+    this.mapMapAnytype = mapMapAnytype;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapMapAnytypeItem(String key, Map<String, Object> mapMapAnytypeItem) {
+    if (this.mapMapAnytype == null) {
+      this.mapMapAnytype = new HashMap<String, Map<String, Object>>();
+    }
+    this.mapMapAnytype.put(key, mapMapAnytypeItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapAnytype
+   * @return mapMapAnytype
+  */
+  @Schema(name = "mapMapAnytype", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, Object>> getMapMapAnytype() {
+    return mapMapAnytype;
+  }
+
+  public void setMapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
+    this.mapMapAnytype = mapMapAnytype;
+  }
+
+  public AdditionalPropertiesClass anytype1(Object anytype1) {
+    this.anytype1 = anytype1;
+    return this;
+  }
+
+  /**
+   * Get anytype1
+   * @return anytype1
+  */
+  @Schema(name = "anytype1", defaultValue = "")
+
+
+  public Object getAnytype1() {
+    return anytype1;
+  }
+
+  public void setAnytype1(Object anytype1) {
+    this.anytype1 = anytype1;
+  }
+
+  public AdditionalPropertiesClass anytype2(Object anytype2) {
+    this.anytype2 = anytype2;
+    return this;
+  }
+
+  /**
+   * Get anytype2
+   * @return anytype2
+  */
+  @Schema(name = "anytype2", defaultValue = "")
+
+
+  public Object getAnytype2() {
+    return anytype2;
+  }
+
+  public void setAnytype2(Object anytype2) {
+    this.anytype2 = anytype2;
+  }
+
+  public AdditionalPropertiesClass anytype3(Object anytype3) {
+    this.anytype3 = anytype3;
+    return this;
+  }
+
+  /**
+   * Get anytype3
+   * @return anytype3
+  */
+  @Schema(name = "anytype3", defaultValue = "")
+
+
+  public Object getAnytype3() {
+    return anytype3;
+  }
+
+  public void setAnytype3(Object anytype3) {
+    this.anytype3 = anytype3;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesClass additionalPropertiesClass = (AdditionalPropertiesClass) o;
+    return Objects.equals(this.mapString, additionalPropertiesClass.mapString) &&
+        Objects.equals(this.mapNumber, additionalPropertiesClass.mapNumber) &&
+        Objects.equals(this.mapInteger, additionalPropertiesClass.mapInteger) &&
+        Objects.equals(this.mapBoolean, additionalPropertiesClass.mapBoolean) &&
+        Objects.equals(this.mapArrayInteger, additionalPropertiesClass.mapArrayInteger) &&
+        Objects.equals(this.mapArrayAnytype, additionalPropertiesClass.mapArrayAnytype) &&
+        Objects.equals(this.mapMapString, additionalPropertiesClass.mapMapString) &&
+        Objects.equals(this.mapMapAnytype, additionalPropertiesClass.mapMapAnytype) &&
+        Objects.equals(this.anytype1, additionalPropertiesClass.anytype1) &&
+        Objects.equals(this.anytype2, additionalPropertiesClass.anytype2) &&
+        Objects.equals(this.anytype3, additionalPropertiesClass.anytype3);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(mapString, mapNumber, mapInteger, mapBoolean, mapArrayInteger, mapArrayAnytype, mapMapString, mapMapAnytype, anytype1, anytype2, anytype3);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesClass {\n");
+    
+    sb.append("    mapString: ").append(toIndentedString(mapString)).append("\n");
+    sb.append("    mapNumber: ").append(toIndentedString(mapNumber)).append("\n");
+    sb.append("    mapInteger: ").append(toIndentedString(mapInteger)).append("\n");
+    sb.append("    mapBoolean: ").append(toIndentedString(mapBoolean)).append("\n");
+    sb.append("    mapArrayInteger: ").append(toIndentedString(mapArrayInteger)).append("\n");
+    sb.append("    mapArrayAnytype: ").append(toIndentedString(mapArrayAnytype)).append("\n");
+    sb.append("    mapMapString: ").append(toIndentedString(mapMapString)).append("\n");
+    sb.append("    mapMapAnytype: ").append(toIndentedString(mapMapAnytype)).append("\n");
+    sb.append("    anytype1: ").append(toIndentedString(anytype1)).append("\n");
+    sb.append("    anytype2: ").append(toIndentedString(anytype2)).append("\n");
+    sb.append("    anytype3: ").append(toIndentedString(anytype3)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
new file mode 100644
index 0000000000000000000000000000000000000000..fb06ae322e26559e4e34ce5fcc5a11bac81947e1
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesInteger
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesInteger extends HashMap<String, Integer>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesInteger name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesInteger additionalPropertiesInteger = (AdditionalPropertiesInteger) o;
+    return Objects.equals(this.name, additionalPropertiesInteger.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesInteger {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
new file mode 100644
index 0000000000000000000000000000000000000000..71868e47335753c82ee2a63ed9fa4a46e6447de8
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
@@ -0,0 +1,85 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesNumber
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesNumber extends HashMap<String, BigDecimal>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesNumber name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesNumber additionalPropertiesNumber = (AdditionalPropertiesNumber) o;
+    return Objects.equals(this.name, additionalPropertiesNumber.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesNumber {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..75db554b32958b9f9ae7265ca2b18c01335182ca
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesObject
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesObject extends HashMap<String, Map>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesObject name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesObject additionalPropertiesObject = (AdditionalPropertiesObject) o;
+    return Objects.equals(this.name, additionalPropertiesObject.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesObject {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesString.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa62e4fbb2ea902e803325eb343e25c5e8db56bd
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesString
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesString extends HashMap<String, String>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesString name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesString additionalPropertiesString = (AdditionalPropertiesString) o;
+    return Objects.equals(this.name, additionalPropertiesString.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesString {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Animal.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Animal.java
new file mode 100644
index 0000000000000000000000000000000000000000..26eeb264a74d22e0993f7a94b461aaa56bfff1db
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Animal.java
@@ -0,0 +1,116 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Animal
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "className", visible = true)
+@JsonSubTypes({
+  @JsonSubTypes.Type(value = BigCat.class, name = "BigCat"),
+  @JsonSubTypes.Type(value = Cat.class, name = "Cat"),
+  @JsonSubTypes.Type(value = Dog.class, name = "Dog"),
+})
+
+public class Animal   {
+  @JsonProperty("className")
+  private String className;
+
+  @JsonProperty("color")
+  private String color = "red";
+
+  public Animal className(String className) {
+    this.className = className;
+    return this;
+  }
+
+  /**
+   * Get className
+   * @return className
+  */
+  @Schema(name = "className", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getClassName() {
+    return className;
+  }
+
+  public void setClassName(String className) {
+    this.className = className;
+  }
+
+  public Animal color(String color) {
+    this.color = color;
+    return this;
+  }
+
+  /**
+   * Get color
+   * @return color
+  */
+  @Schema(name = "color", defaultValue = "")
+
+
+  public String getColor() {
+    return color;
+  }
+
+  public void setColor(String color) {
+    this.color = color;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Animal animal = (Animal) o;
+    return Objects.equals(this.className, animal.className) &&
+        Objects.equals(this.color, animal.color);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(className, color);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Animal {\n");
+    
+    sb.append("    className: ").append(toIndentedString(className)).append("\n");
+    sb.append("    color: ").append(toIndentedString(color)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..436750d2ef67979c034f86996208cd1ad126f672
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
@@ -0,0 +1,94 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayOfArrayOfNumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfArrayOfNumberOnly   {
+  @JsonProperty("ArrayArrayNumber")
+  @Valid
+  private List<List<BigDecimal>> arrayArrayNumber = null;
+
+  public ArrayOfArrayOfNumberOnly arrayArrayNumber(List<List<BigDecimal>> arrayArrayNumber) {
+    this.arrayArrayNumber = arrayArrayNumber;
+    return this;
+  }
+
+  public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List<BigDecimal> arrayArrayNumberItem) {
+    if (this.arrayArrayNumber == null) {
+      this.arrayArrayNumber = new ArrayList<List<BigDecimal>>();
+    }
+    this.arrayArrayNumber.add(arrayArrayNumberItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayNumber
+   * @return arrayArrayNumber
+  */
+  @Schema(name = "arrayArrayNumber", defaultValue = "")
+
+  @Valid
+
+  public List<List<BigDecimal>> getArrayArrayNumber() {
+    return arrayArrayNumber;
+  }
+
+  public void setArrayArrayNumber(List<List<BigDecimal>> arrayArrayNumber) {
+    this.arrayArrayNumber = arrayArrayNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayOfArrayOfNumberOnly arrayOfArrayOfNumberOnly = (ArrayOfArrayOfNumberOnly) o;
+    return Objects.equals(this.arrayArrayNumber, arrayOfArrayOfNumberOnly.arrayArrayNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayArrayNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayOfArrayOfNumberOnly {\n");
+    
+    sb.append("    arrayArrayNumber: ").append(toIndentedString(arrayArrayNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..da9c15f73dd10a3b58900c51d08fc0ca02bbe3ee
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
@@ -0,0 +1,94 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayOfNumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfNumberOnly   {
+  @JsonProperty("ArrayNumber")
+  @Valid
+  private List<BigDecimal> arrayNumber = null;
+
+  public ArrayOfNumberOnly arrayNumber(List<BigDecimal> arrayNumber) {
+    this.arrayNumber = arrayNumber;
+    return this;
+  }
+
+  public ArrayOfNumberOnly addArrayNumberItem(BigDecimal arrayNumberItem) {
+    if (this.arrayNumber == null) {
+      this.arrayNumber = new ArrayList<BigDecimal>();
+    }
+    this.arrayNumber.add(arrayNumberItem);
+    return this;
+  }
+
+  /**
+   * Get arrayNumber
+   * @return arrayNumber
+  */
+  @Schema(name = "arrayNumber", defaultValue = "")
+
+  @Valid
+
+  public List<BigDecimal> getArrayNumber() {
+    return arrayNumber;
+  }
+
+  public void setArrayNumber(List<BigDecimal> arrayNumber) {
+    this.arrayNumber = arrayNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayOfNumberOnly arrayOfNumberOnly = (ArrayOfNumberOnly) o;
+    return Objects.equals(this.arrayNumber, arrayOfNumberOnly.arrayNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayOfNumberOnly {\n");
+    
+    sb.append("    arrayNumber: ").append(toIndentedString(arrayNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ArrayTest.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ArrayTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e995d00cb8d207e51ac43c336da0ed7eebe41df
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ArrayTest.java
@@ -0,0 +1,163 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.model.ReadOnlyFirst;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayTest   {
+  @JsonProperty("array_of_string")
+  @Valid
+  private List<String> arrayOfString = null;
+
+  @JsonProperty("array_array_of_integer")
+  @Valid
+  private List<List<Long>> arrayArrayOfInteger = null;
+
+  @JsonProperty("array_array_of_model")
+  @Valid
+  private List<List<ReadOnlyFirst>> arrayArrayOfModel = null;
+
+  public ArrayTest arrayOfString(List<String> arrayOfString) {
+    this.arrayOfString = arrayOfString;
+    return this;
+  }
+
+  public ArrayTest addArrayOfStringItem(String arrayOfStringItem) {
+    if (this.arrayOfString == null) {
+      this.arrayOfString = new ArrayList<String>();
+    }
+    this.arrayOfString.add(arrayOfStringItem);
+    return this;
+  }
+
+  /**
+   * Get arrayOfString
+   * @return arrayOfString
+  */
+  @Schema(name = "arrayOfString", defaultValue = "")
+
+
+  public List<String> getArrayOfString() {
+    return arrayOfString;
+  }
+
+  public void setArrayOfString(List<String> arrayOfString) {
+    this.arrayOfString = arrayOfString;
+  }
+
+  public ArrayTest arrayArrayOfInteger(List<List<Long>> arrayArrayOfInteger) {
+    this.arrayArrayOfInteger = arrayArrayOfInteger;
+    return this;
+  }
+
+  public ArrayTest addArrayArrayOfIntegerItem(List<Long> arrayArrayOfIntegerItem) {
+    if (this.arrayArrayOfInteger == null) {
+      this.arrayArrayOfInteger = new ArrayList<List<Long>>();
+    }
+    this.arrayArrayOfInteger.add(arrayArrayOfIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayOfInteger
+   * @return arrayArrayOfInteger
+  */
+  @Schema(name = "arrayArrayOfInteger", defaultValue = "")
+
+  @Valid
+
+  public List<List<Long>> getArrayArrayOfInteger() {
+    return arrayArrayOfInteger;
+  }
+
+  public void setArrayArrayOfInteger(List<List<Long>> arrayArrayOfInteger) {
+    this.arrayArrayOfInteger = arrayArrayOfInteger;
+  }
+
+  public ArrayTest arrayArrayOfModel(List<List<ReadOnlyFirst>> arrayArrayOfModel) {
+    this.arrayArrayOfModel = arrayArrayOfModel;
+    return this;
+  }
+
+  public ArrayTest addArrayArrayOfModelItem(List<ReadOnlyFirst> arrayArrayOfModelItem) {
+    if (this.arrayArrayOfModel == null) {
+      this.arrayArrayOfModel = new ArrayList<List<ReadOnlyFirst>>();
+    }
+    this.arrayArrayOfModel.add(arrayArrayOfModelItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayOfModel
+   * @return arrayArrayOfModel
+  */
+  @Schema(name = "arrayArrayOfModel", defaultValue = "")
+
+  @Valid
+
+  public List<List<ReadOnlyFirst>> getArrayArrayOfModel() {
+    return arrayArrayOfModel;
+  }
+
+  public void setArrayArrayOfModel(List<List<ReadOnlyFirst>> arrayArrayOfModel) {
+    this.arrayArrayOfModel = arrayArrayOfModel;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayTest arrayTest = (ArrayTest) o;
+    return Objects.equals(this.arrayOfString, arrayTest.arrayOfString) &&
+        Objects.equals(this.arrayArrayOfInteger, arrayTest.arrayArrayOfInteger) &&
+        Objects.equals(this.arrayArrayOfModel, arrayTest.arrayArrayOfModel);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayOfString, arrayArrayOfInteger, arrayArrayOfModel);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayTest {\n");
+    
+    sb.append("    arrayOfString: ").append(toIndentedString(arrayOfString)).append("\n");
+    sb.append("    arrayArrayOfInteger: ").append(toIndentedString(arrayArrayOfInteger)).append("\n");
+    sb.append("    arrayArrayOfModel: ").append(toIndentedString(arrayArrayOfModel)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/BigCat.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/BigCat.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ca8388a6ce44e65f03465e1d20f53c33b1d98df
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/BigCat.java
@@ -0,0 +1,124 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.BigCatAllOf;
+import org.openapitools.model.Cat;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * BigCat
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class BigCat extends Cat  {
+  /**
+   * Gets or Sets kind
+   */
+  public enum KindEnum {
+    LIONS("lions"),
+    
+    TIGERS("tigers"),
+    
+    LEOPARDS("leopards"),
+    
+    JAGUARS("jaguars");
+
+    private String value;
+
+    KindEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static KindEnum fromValue(String value) {
+      for (KindEnum b : KindEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("kind")
+  private KindEnum kind;
+
+  public BigCat kind(KindEnum kind) {
+    this.kind = kind;
+    return this;
+  }
+
+  /**
+   * Get kind
+   * @return kind
+  */
+  @Schema(name = "kind", defaultValue = "")
+
+
+  public KindEnum getKind() {
+    return kind;
+  }
+
+  public void setKind(KindEnum kind) {
+    this.kind = kind;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BigCat bigCat = (BigCat) o;
+    return Objects.equals(this.kind, bigCat.kind) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(kind, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BigCat {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    kind: ").append(toIndentedString(kind)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/BigCatAllOf.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/BigCatAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..f39298398eb989cd595f9927be3d90847b02a141
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/BigCatAllOf.java
@@ -0,0 +1,121 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * BigCatAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class BigCatAllOf   {
+  /**
+   * Gets or Sets kind
+   */
+  public enum KindEnum {
+    LIONS("lions"),
+    
+    TIGERS("tigers"),
+    
+    LEOPARDS("leopards"),
+    
+    JAGUARS("jaguars");
+
+    private String value;
+
+    KindEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static KindEnum fromValue(String value) {
+      for (KindEnum b : KindEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("kind")
+  private KindEnum kind;
+
+  public BigCatAllOf kind(KindEnum kind) {
+    this.kind = kind;
+    return this;
+  }
+
+  /**
+   * Get kind
+   * @return kind
+  */
+  @Schema(name = "kind", defaultValue = "")
+
+
+  public KindEnum getKind() {
+    return kind;
+  }
+
+  public void setKind(KindEnum kind) {
+    this.kind = kind;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BigCatAllOf bigCatAllOf = (BigCatAllOf) o;
+    return Objects.equals(this.kind, bigCatAllOf.kind);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(kind);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BigCatAllOf {\n");
+    
+    sb.append("    kind: ").append(toIndentedString(kind)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Capitalization.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Capitalization.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac4b972588882f67dd920a7d8ca9deef396c7d88
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Capitalization.java
@@ -0,0 +1,206 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Capitalization
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Capitalization   {
+  @JsonProperty("smallCamel")
+  private String smallCamel;
+
+  @JsonProperty("CapitalCamel")
+  private String capitalCamel;
+
+  @JsonProperty("small_Snake")
+  private String smallSnake;
+
+  @JsonProperty("Capital_Snake")
+  private String capitalSnake;
+
+  @JsonProperty("SCA_ETH_Flow_Points")
+  private String scAETHFlowPoints;
+
+  @JsonProperty("ATT_NAME")
+  private String ATT_NAME;
+
+  public Capitalization smallCamel(String smallCamel) {
+    this.smallCamel = smallCamel;
+    return this;
+  }
+
+  /**
+   * Get smallCamel
+   * @return smallCamel
+  */
+  @Schema(name = "smallCamel", defaultValue = "")
+
+
+  public String getSmallCamel() {
+    return smallCamel;
+  }
+
+  public void setSmallCamel(String smallCamel) {
+    this.smallCamel = smallCamel;
+  }
+
+  public Capitalization capitalCamel(String capitalCamel) {
+    this.capitalCamel = capitalCamel;
+    return this;
+  }
+
+  /**
+   * Get capitalCamel
+   * @return capitalCamel
+  */
+  @Schema(name = "capitalCamel", defaultValue = "")
+
+
+  public String getCapitalCamel() {
+    return capitalCamel;
+  }
+
+  public void setCapitalCamel(String capitalCamel) {
+    this.capitalCamel = capitalCamel;
+  }
+
+  public Capitalization smallSnake(String smallSnake) {
+    this.smallSnake = smallSnake;
+    return this;
+  }
+
+  /**
+   * Get smallSnake
+   * @return smallSnake
+  */
+  @Schema(name = "smallSnake", defaultValue = "")
+
+
+  public String getSmallSnake() {
+    return smallSnake;
+  }
+
+  public void setSmallSnake(String smallSnake) {
+    this.smallSnake = smallSnake;
+  }
+
+  public Capitalization capitalSnake(String capitalSnake) {
+    this.capitalSnake = capitalSnake;
+    return this;
+  }
+
+  /**
+   * Get capitalSnake
+   * @return capitalSnake
+  */
+  @Schema(name = "capitalSnake", defaultValue = "")
+
+
+  public String getCapitalSnake() {
+    return capitalSnake;
+  }
+
+  public void setCapitalSnake(String capitalSnake) {
+    this.capitalSnake = capitalSnake;
+  }
+
+  public Capitalization scAETHFlowPoints(String scAETHFlowPoints) {
+    this.scAETHFlowPoints = scAETHFlowPoints;
+    return this;
+  }
+
+  /**
+   * Get scAETHFlowPoints
+   * @return scAETHFlowPoints
+  */
+  @Schema(name = "scAETHFlowPoints", defaultValue = "")
+
+
+  public String getScAETHFlowPoints() {
+    return scAETHFlowPoints;
+  }
+
+  public void setScAETHFlowPoints(String scAETHFlowPoints) {
+    this.scAETHFlowPoints = scAETHFlowPoints;
+  }
+
+  public Capitalization ATT_NAME(String ATT_NAME) {
+    this.ATT_NAME = ATT_NAME;
+    return this;
+  }
+
+  /**
+   * Name of the pet 
+   * @return ATT_NAME
+  */
+  @Schema(name = "ATT_NAME", defaultValue = "Name of the pet ")
+
+
+  public String getATTNAME() {
+    return ATT_NAME;
+  }
+
+  public void setATTNAME(String ATT_NAME) {
+    this.ATT_NAME = ATT_NAME;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Capitalization capitalization = (Capitalization) o;
+    return Objects.equals(this.smallCamel, capitalization.smallCamel) &&
+        Objects.equals(this.capitalCamel, capitalization.capitalCamel) &&
+        Objects.equals(this.smallSnake, capitalization.smallSnake) &&
+        Objects.equals(this.capitalSnake, capitalization.capitalSnake) &&
+        Objects.equals(this.scAETHFlowPoints, capitalization.scAETHFlowPoints) &&
+        Objects.equals(this.ATT_NAME, capitalization.ATT_NAME);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(smallCamel, capitalCamel, smallSnake, capitalSnake, scAETHFlowPoints, ATT_NAME);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Capitalization {\n");
+    
+    sb.append("    smallCamel: ").append(toIndentedString(smallCamel)).append("\n");
+    sb.append("    capitalCamel: ").append(toIndentedString(capitalCamel)).append("\n");
+    sb.append("    smallSnake: ").append(toIndentedString(smallSnake)).append("\n");
+    sb.append("    capitalSnake: ").append(toIndentedString(capitalSnake)).append("\n");
+    sb.append("    scAETHFlowPoints: ").append(toIndentedString(scAETHFlowPoints)).append("\n");
+    sb.append("    ATT_NAME: ").append(toIndentedString(ATT_NAME)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Cat.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Cat.java
new file mode 100644
index 0000000000000000000000000000000000000000..e41f36a626bdef7d8a45d8d0f2bd1450690c9e98
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Cat.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.model.Animal;
+import org.openapitools.model.CatAllOf;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Cat
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Cat extends Animal  {
+  @JsonProperty("declawed")
+  private Boolean declawed;
+
+  public Cat declawed(Boolean declawed) {
+    this.declawed = declawed;
+    return this;
+  }
+
+  /**
+   * Get declawed
+   * @return declawed
+  */
+  @Schema(name = "declawed", defaultValue = "")
+
+
+  public Boolean getDeclawed() {
+    return declawed;
+  }
+
+  public void setDeclawed(Boolean declawed) {
+    this.declawed = declawed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Cat cat = (Cat) o;
+    return Objects.equals(this.declawed, cat.declawed) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(declawed, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Cat {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    declawed: ").append(toIndentedString(declawed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/CatAllOf.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/CatAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..9bc555ab000764b64819ea1de98f5ab014861e25
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/CatAllOf.java
@@ -0,0 +1,81 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * CatAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class CatAllOf   {
+  @JsonProperty("declawed")
+  private Boolean declawed;
+
+  public CatAllOf declawed(Boolean declawed) {
+    this.declawed = declawed;
+    return this;
+  }
+
+  /**
+   * Get declawed
+   * @return declawed
+  */
+  @Schema(name = "declawed", defaultValue = "")
+
+
+  public Boolean getDeclawed() {
+    return declawed;
+  }
+
+  public void setDeclawed(Boolean declawed) {
+    this.declawed = declawed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CatAllOf catAllOf = (CatAllOf) o;
+    return Objects.equals(this.declawed, catAllOf.declawed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(declawed);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CatAllOf {\n");
+    
+    sb.append("    declawed: ").append(toIndentedString(declawed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Category.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Category.java
new file mode 100644
index 0000000000000000000000000000000000000000..03a760ee3fd5457dfa42ddea543af48d2d2f918a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Category.java
@@ -0,0 +1,107 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Category
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Category   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name = "default-name";
+
+  public Category id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Category name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Category category = (Category) o;
+    return Objects.equals(this.id, category.id) &&
+        Objects.equals(this.name, category.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Category {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ClassModel.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ClassModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..878a45986a82883124f54c1753d20da64ea5fcbc
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ClassModel.java
@@ -0,0 +1,82 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model with \&quot;_class\&quot; property
+ */
+@Schema(name = "ClassModel",description = "Model for testing model with \"_class\" property")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ClassModel   {
+  @JsonProperty("_class")
+  private String propertyClass;
+
+  public ClassModel propertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+    return this;
+  }
+
+  /**
+   * Get propertyClass
+   * @return propertyClass
+  */
+  @Schema(name = "propertyClass", defaultValue = "")
+
+
+  public String getPropertyClass() {
+    return propertyClass;
+  }
+
+  public void setPropertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ClassModel classModel = (ClassModel) o;
+    return Objects.equals(this.propertyClass, classModel.propertyClass);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(propertyClass);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ClassModel {\n");
+    
+    sb.append("    propertyClass: ").append(toIndentedString(propertyClass)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Client.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..74b85fd282345037860f8342aaad4fe19a5c918d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Client.java
@@ -0,0 +1,81 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Client
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Client   {
+  @JsonProperty("client")
+  private String client;
+
+  public Client client(String client) {
+    this.client = client;
+    return this;
+  }
+
+  /**
+   * Get client
+   * @return client
+  */
+  @Schema(name = "client", defaultValue = "")
+
+
+  public String getClient() {
+    return client;
+  }
+
+  public void setClient(String client) {
+    this.client = client;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Client client = (Client) o;
+    return Objects.equals(this.client, client.client);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(client);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Client {\n");
+    
+    sb.append("    client: ").append(toIndentedString(client)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Dog.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Dog.java
new file mode 100644
index 0000000000000000000000000000000000000000..1dbce140c9024ce3159b819b56cf800a9cb64b47
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Dog.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.model.Animal;
+import org.openapitools.model.DogAllOf;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Dog
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Dog extends Animal  {
+  @JsonProperty("breed")
+  private String breed;
+
+  public Dog breed(String breed) {
+    this.breed = breed;
+    return this;
+  }
+
+  /**
+   * Get breed
+   * @return breed
+  */
+  @Schema(name = "breed", defaultValue = "")
+
+
+  public String getBreed() {
+    return breed;
+  }
+
+  public void setBreed(String breed) {
+    this.breed = breed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Dog dog = (Dog) o;
+    return Objects.equals(this.breed, dog.breed) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(breed, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Dog {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    breed: ").append(toIndentedString(breed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/DogAllOf.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/DogAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..0af97ffbaf41b4d42a6d2c94ae611a2066175225
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/DogAllOf.java
@@ -0,0 +1,81 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * DogAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class DogAllOf   {
+  @JsonProperty("breed")
+  private String breed;
+
+  public DogAllOf breed(String breed) {
+    this.breed = breed;
+    return this;
+  }
+
+  /**
+   * Get breed
+   * @return breed
+  */
+  @Schema(name = "breed", defaultValue = "")
+
+
+  public String getBreed() {
+    return breed;
+  }
+
+  public void setBreed(String breed) {
+    this.breed = breed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    DogAllOf dogAllOf = (DogAllOf) o;
+    return Objects.equals(this.breed, dogAllOf.breed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(breed);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class DogAllOf {\n");
+    
+    sb.append("    breed: ").append(toIndentedString(breed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/EnumArrays.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/EnumArrays.java
new file mode 100644
index 0000000000000000000000000000000000000000..ef006f92c684197a52fd315ec47dcccae1aae135
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/EnumArrays.java
@@ -0,0 +1,188 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * EnumArrays
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class EnumArrays   {
+  /**
+   * Gets or Sets justSymbol
+   */
+  public enum JustSymbolEnum {
+    GREATER_THAN_OR_EQUAL_TO(">="),
+    
+    DOLLAR("$");
+
+    private String value;
+
+    JustSymbolEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static JustSymbolEnum fromValue(String value) {
+      for (JustSymbolEnum b : JustSymbolEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("just_symbol")
+  private JustSymbolEnum justSymbol;
+
+  /**
+   * Gets or Sets arrayEnum
+   */
+  public enum ArrayEnumEnum {
+    FISH("fish"),
+    
+    CRAB("crab");
+
+    private String value;
+
+    ArrayEnumEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static ArrayEnumEnum fromValue(String value) {
+      for (ArrayEnumEnum b : ArrayEnumEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("array_enum")
+  @Valid
+  private List<ArrayEnumEnum> arrayEnum = null;
+
+  public EnumArrays justSymbol(JustSymbolEnum justSymbol) {
+    this.justSymbol = justSymbol;
+    return this;
+  }
+
+  /**
+   * Get justSymbol
+   * @return justSymbol
+  */
+  @Schema(name = "justSymbol", defaultValue = "")
+
+
+  public JustSymbolEnum getJustSymbol() {
+    return justSymbol;
+  }
+
+  public void setJustSymbol(JustSymbolEnum justSymbol) {
+    this.justSymbol = justSymbol;
+  }
+
+  public EnumArrays arrayEnum(List<ArrayEnumEnum> arrayEnum) {
+    this.arrayEnum = arrayEnum;
+    return this;
+  }
+
+  public EnumArrays addArrayEnumItem(ArrayEnumEnum arrayEnumItem) {
+    if (this.arrayEnum == null) {
+      this.arrayEnum = new ArrayList<ArrayEnumEnum>();
+    }
+    this.arrayEnum.add(arrayEnumItem);
+    return this;
+  }
+
+  /**
+   * Get arrayEnum
+   * @return arrayEnum
+  */
+  @Schema(name = "arrayEnum", defaultValue = "")
+
+
+  public List<ArrayEnumEnum> getArrayEnum() {
+    return arrayEnum;
+  }
+
+  public void setArrayEnum(List<ArrayEnumEnum> arrayEnum) {
+    this.arrayEnum = arrayEnum;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    EnumArrays enumArrays = (EnumArrays) o;
+    return Objects.equals(this.justSymbol, enumArrays.justSymbol) &&
+        Objects.equals(this.arrayEnum, enumArrays.arrayEnum);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(justSymbol, arrayEnum);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class EnumArrays {\n");
+    
+    sb.append("    justSymbol: ").append(toIndentedString(justSymbol)).append("\n");
+    sb.append("    arrayEnum: ").append(toIndentedString(arrayEnum)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/EnumClass.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/EnumClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..f5edf59363ac1e42144e2d317c7b6f9ffcab2c44
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/EnumClass.java
@@ -0,0 +1,53 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonValue;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets EnumClass
+ */
+public enum EnumClass {
+  
+  _ABC("_abc"),
+  
+  _EFG("-efg"),
+  
+  _XYZ_("(xyz)");
+
+  private String value;
+
+  EnumClass(String value) {
+    this.value = value;
+  }
+
+  @JsonValue
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(value);
+  }
+
+  @JsonCreator
+  public static EnumClass fromValue(String value) {
+    for (EnumClass b : EnumClass.values()) {
+      if (b.value.equals(value)) {
+        return b;
+      }
+    }
+    throw new IllegalArgumentException("Unexpected value '" + value + "'");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/EnumTest.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/EnumTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f67ec5d041aa22668527a91ea6e06d27496905d5
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/EnumTest.java
@@ -0,0 +1,329 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.OuterEnum;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * EnumTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class EnumTest   {
+  /**
+   * Gets or Sets enumString
+   */
+  public enum EnumStringEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower"),
+    
+    EMPTY("");
+
+    private String value;
+
+    EnumStringEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumStringEnum fromValue(String value) {
+      for (EnumStringEnum b : EnumStringEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_string")
+  private EnumStringEnum enumString;
+
+  /**
+   * Gets or Sets enumStringRequired
+   */
+  public enum EnumStringRequiredEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower"),
+    
+    EMPTY("");
+
+    private String value;
+
+    EnumStringRequiredEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumStringRequiredEnum fromValue(String value) {
+      for (EnumStringRequiredEnum b : EnumStringRequiredEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_string_required")
+  private EnumStringRequiredEnum enumStringRequired;
+
+  /**
+   * Gets or Sets enumInteger
+   */
+  public enum EnumIntegerEnum {
+    NUMBER_1(1),
+    
+    NUMBER_MINUS_1(-1);
+
+    private Integer value;
+
+    EnumIntegerEnum(Integer value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public Integer getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumIntegerEnum fromValue(Integer value) {
+      for (EnumIntegerEnum b : EnumIntegerEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_integer")
+  private EnumIntegerEnum enumInteger;
+
+  /**
+   * Gets or Sets enumNumber
+   */
+  public enum EnumNumberEnum {
+    NUMBER_1_DOT_1(1.1),
+    
+    NUMBER_MINUS_1_DOT_2(-1.2);
+
+    private Double value;
+
+    EnumNumberEnum(Double value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public Double getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumNumberEnum fromValue(Double value) {
+      for (EnumNumberEnum b : EnumNumberEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_number")
+  private EnumNumberEnum enumNumber;
+
+  @JsonProperty("outerEnum")
+  private OuterEnum outerEnum;
+
+  public EnumTest enumString(EnumStringEnum enumString) {
+    this.enumString = enumString;
+    return this;
+  }
+
+  /**
+   * Get enumString
+   * @return enumString
+  */
+  @Schema(name = "enumString", defaultValue = "")
+
+
+  public EnumStringEnum getEnumString() {
+    return enumString;
+  }
+
+  public void setEnumString(EnumStringEnum enumString) {
+    this.enumString = enumString;
+  }
+
+  public EnumTest enumStringRequired(EnumStringRequiredEnum enumStringRequired) {
+    this.enumStringRequired = enumStringRequired;
+    return this;
+  }
+
+  /**
+   * Get enumStringRequired
+   * @return enumStringRequired
+  */
+  @Schema(name = "enumStringRequired", required = true, defaultValue = "")
+  @NotNull
+
+
+  public EnumStringRequiredEnum getEnumStringRequired() {
+    return enumStringRequired;
+  }
+
+  public void setEnumStringRequired(EnumStringRequiredEnum enumStringRequired) {
+    this.enumStringRequired = enumStringRequired;
+  }
+
+  public EnumTest enumInteger(EnumIntegerEnum enumInteger) {
+    this.enumInteger = enumInteger;
+    return this;
+  }
+
+  /**
+   * Get enumInteger
+   * @return enumInteger
+  */
+  @Schema(name = "enumInteger", defaultValue = "")
+
+
+  public EnumIntegerEnum getEnumInteger() {
+    return enumInteger;
+  }
+
+  public void setEnumInteger(EnumIntegerEnum enumInteger) {
+    this.enumInteger = enumInteger;
+  }
+
+  public EnumTest enumNumber(EnumNumberEnum enumNumber) {
+    this.enumNumber = enumNumber;
+    return this;
+  }
+
+  /**
+   * Get enumNumber
+   * @return enumNumber
+  */
+  @Schema(name = "enumNumber", defaultValue = "")
+
+
+  public EnumNumberEnum getEnumNumber() {
+    return enumNumber;
+  }
+
+  public void setEnumNumber(EnumNumberEnum enumNumber) {
+    this.enumNumber = enumNumber;
+  }
+
+  public EnumTest outerEnum(OuterEnum outerEnum) {
+    this.outerEnum = outerEnum;
+    return this;
+  }
+
+  /**
+   * Get outerEnum
+   * @return outerEnum
+  */
+  @Schema(name = "outerEnum", defaultValue = "")
+
+  @Valid
+
+  public OuterEnum getOuterEnum() {
+    return outerEnum;
+  }
+
+  public void setOuterEnum(OuterEnum outerEnum) {
+    this.outerEnum = outerEnum;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    EnumTest enumTest = (EnumTest) o;
+    return Objects.equals(this.enumString, enumTest.enumString) &&
+        Objects.equals(this.enumStringRequired, enumTest.enumStringRequired) &&
+        Objects.equals(this.enumInteger, enumTest.enumInteger) &&
+        Objects.equals(this.enumNumber, enumTest.enumNumber) &&
+        Objects.equals(this.outerEnum, enumTest.outerEnum);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(enumString, enumStringRequired, enumInteger, enumNumber, outerEnum);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class EnumTest {\n");
+    
+    sb.append("    enumString: ").append(toIndentedString(enumString)).append("\n");
+    sb.append("    enumStringRequired: ").append(toIndentedString(enumStringRequired)).append("\n");
+    sb.append("    enumInteger: ").append(toIndentedString(enumInteger)).append("\n");
+    sb.append("    enumNumber: ").append(toIndentedString(enumNumber)).append("\n");
+    sb.append("    outerEnum: ").append(toIndentedString(outerEnum)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FileSchemaTestClass.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FileSchemaTestClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..2de2ee314c03cc66a47dd77dd6e150efe2d78764
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FileSchemaTestClass.java
@@ -0,0 +1,119 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * FileSchemaTestClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FileSchemaTestClass   {
+  @JsonProperty("file")
+  private java.io.File file;
+
+  @JsonProperty("files")
+  @Valid
+  private List<java.io.File> files = null;
+
+  public FileSchemaTestClass file(java.io.File file) {
+    this.file = file;
+    return this;
+  }
+
+  /**
+   * Get file
+   * @return file
+  */
+  @Schema(name = "file", defaultValue = "")
+
+  @Valid
+
+  public java.io.File getFile() {
+    return file;
+  }
+
+  public void setFile(java.io.File file) {
+    this.file = file;
+  }
+
+  public FileSchemaTestClass files(List<java.io.File> files) {
+    this.files = files;
+    return this;
+  }
+
+  public FileSchemaTestClass addFilesItem(java.io.File filesItem) {
+    if (this.files == null) {
+      this.files = new ArrayList<java.io.File>();
+    }
+    this.files.add(filesItem);
+    return this;
+  }
+
+  /**
+   * Get files
+   * @return files
+  */
+  @Schema(name = "files", defaultValue = "")
+
+  @Valid
+
+  public List<java.io.File> getFiles() {
+    return files;
+  }
+
+  public void setFiles(List<java.io.File> files) {
+    this.files = files;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    FileSchemaTestClass fileSchemaTestClass = (FileSchemaTestClass) o;
+    return Objects.equals(this.file, fileSchemaTestClass.file) &&
+        Objects.equals(this.files, fileSchemaTestClass.files);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(file, files);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class FileSchemaTestClass {\n");
+    
+    sb.append("    file: ").append(toIndentedString(file)).append("\n");
+    sb.append("    files: ").append(toIndentedString(files)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FormatTest.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FormatTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0203457d83b7c3e1b761ec2c86dbd3b29902b8a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FormatTest.java
@@ -0,0 +1,433 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.UUID;
+import org.threeten.bp.LocalDate;
+import org.threeten.bp.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * FormatTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FormatTest   {
+  @JsonProperty("integer")
+  private Integer integer;
+
+  @JsonProperty("int32")
+  private Integer int32;
+
+  @JsonProperty("int64")
+  private Long int64;
+
+  @JsonProperty("number")
+  private BigDecimal number;
+
+  @JsonProperty("float")
+  private Float _float;
+
+  @JsonProperty("double")
+  private Double _double;
+
+  @JsonProperty("string")
+  private String string;
+
+  @JsonProperty("byte")
+  private byte[] _byte;
+
+  @JsonProperty("binary")
+  private org.springframework.core.io.Resource binary;
+
+  @JsonProperty("date")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE)
+  private LocalDate date;
+
+  @JsonProperty("dateTime")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime dateTime;
+
+  @JsonProperty("uuid")
+  private UUID uuid;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("BigDecimal")
+  private BigDecimal bigDecimal;
+
+  public FormatTest integer(Integer integer) {
+    this.integer = integer;
+    return this;
+  }
+
+  /**
+   * Get integer
+   * minimum: 10
+   * maximum: 100
+   * @return integer
+  */
+  @Schema(name = "integer", defaultValue = "")
+
+@Min(10) @Max(100) 
+  public Integer getInteger() {
+    return integer;
+  }
+
+  public void setInteger(Integer integer) {
+    this.integer = integer;
+  }
+
+  public FormatTest int32(Integer int32) {
+    this.int32 = int32;
+    return this;
+  }
+
+  /**
+   * Get int32
+   * minimum: 20
+   * maximum: 200
+   * @return int32
+  */
+  @Schema(name = "int32", defaultValue = "")
+
+@Min(20) @Max(200) 
+  public Integer getInt32() {
+    return int32;
+  }
+
+  public void setInt32(Integer int32) {
+    this.int32 = int32;
+  }
+
+  public FormatTest int64(Long int64) {
+    this.int64 = int64;
+    return this;
+  }
+
+  /**
+   * Get int64
+   * @return int64
+  */
+  @Schema(name = "int64", defaultValue = "")
+
+
+  public Long getInt64() {
+    return int64;
+  }
+
+  public void setInt64(Long int64) {
+    this.int64 = int64;
+  }
+
+  public FormatTest number(BigDecimal number) {
+    this.number = number;
+    return this;
+  }
+
+  /**
+   * Get number
+   * minimum: 32.1
+   * maximum: 543.2
+   * @return number
+  */
+  @Schema(name = "number", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+@DecimalMin("32.1") @DecimalMax("543.2") 
+  public BigDecimal getNumber() {
+    return number;
+  }
+
+  public void setNumber(BigDecimal number) {
+    this.number = number;
+  }
+
+  public FormatTest _float(Float _float) {
+    this._float = _float;
+    return this;
+  }
+
+  /**
+   * Get _float
+   * minimum: 54.3
+   * maximum: 987.6
+   * @return _float
+  */
+  @Schema(name = "_float", defaultValue = "")
+
+@DecimalMin("54.3") @DecimalMax("987.6") 
+  public Float getFloat() {
+    return _float;
+  }
+
+  public void setFloat(Float _float) {
+    this._float = _float;
+  }
+
+  public FormatTest _double(Double _double) {
+    this._double = _double;
+    return this;
+  }
+
+  /**
+   * Get _double
+   * minimum: 67.8
+   * maximum: 123.4
+   * @return _double
+  */
+  @Schema(name = "_double", defaultValue = "")
+
+@DecimalMin("67.8") @DecimalMax("123.4") 
+  public Double getDouble() {
+    return _double;
+  }
+
+  public void setDouble(Double _double) {
+    this._double = _double;
+  }
+
+  public FormatTest string(String string) {
+    this.string = string;
+    return this;
+  }
+
+  /**
+   * Get string
+   * @return string
+  */
+  @Schema(name = "string", defaultValue = "")
+
+@Pattern(regexp = "/[a-z]/i") 
+  public String getString() {
+    return string;
+  }
+
+  public void setString(String string) {
+    this.string = string;
+  }
+
+  public FormatTest _byte(byte[] _byte) {
+    this._byte = _byte;
+    return this;
+  }
+
+  /**
+   * Get _byte
+   * @return _byte
+  */
+  @Schema(name = "_byte", required = true, defaultValue = "")
+  @NotNull
+
+
+  public byte[] getByte() {
+    return _byte;
+  }
+
+  public void setByte(byte[] _byte) {
+    this._byte = _byte;
+  }
+
+  public FormatTest binary(org.springframework.core.io.Resource binary) {
+    this.binary = binary;
+    return this;
+  }
+
+  /**
+   * Get binary
+   * @return binary
+  */
+  @Schema(name = "binary", defaultValue = "")
+
+  @Valid
+
+  public org.springframework.core.io.Resource getBinary() {
+    return binary;
+  }
+
+  public void setBinary(org.springframework.core.io.Resource binary) {
+    this.binary = binary;
+  }
+
+  public FormatTest date(LocalDate date) {
+    this.date = date;
+    return this;
+  }
+
+  /**
+   * Get date
+   * @return date
+  */
+  @Schema(name = "date", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public LocalDate getDate() {
+    return date;
+  }
+
+  public void setDate(LocalDate date) {
+    this.date = date;
+  }
+
+  public FormatTest dateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+    return this;
+  }
+
+  /**
+   * Get dateTime
+   * @return dateTime
+  */
+  @Schema(name = "dateTime", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getDateTime() {
+    return dateTime;
+  }
+
+  public void setDateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+  }
+
+  public FormatTest uuid(UUID uuid) {
+    this.uuid = uuid;
+    return this;
+  }
+
+  /**
+   * Get uuid
+   * @return uuid
+  */
+  @Schema(name = "uuid", example = "72f98069-206d-4f12-9f12-3d1e525a8e84", defaultValue = "")
+
+  @Valid
+
+  public UUID getUuid() {
+    return uuid;
+  }
+
+  public void setUuid(UUID uuid) {
+    this.uuid = uuid;
+  }
+
+  public FormatTest password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", required = true, defaultValue = "")
+  @NotNull
+
+@Size(min = 10, max = 64) 
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public FormatTest bigDecimal(BigDecimal bigDecimal) {
+    this.bigDecimal = bigDecimal;
+    return this;
+  }
+
+  /**
+   * Get bigDecimal
+   * @return bigDecimal
+  */
+  @Schema(name = "bigDecimal", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getBigDecimal() {
+    return bigDecimal;
+  }
+
+  public void setBigDecimal(BigDecimal bigDecimal) {
+    this.bigDecimal = bigDecimal;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    FormatTest formatTest = (FormatTest) o;
+    return Objects.equals(this.integer, formatTest.integer) &&
+        Objects.equals(this.int32, formatTest.int32) &&
+        Objects.equals(this.int64, formatTest.int64) &&
+        Objects.equals(this.number, formatTest.number) &&
+        Objects.equals(this._float, formatTest._float) &&
+        Objects.equals(this._double, formatTest._double) &&
+        Objects.equals(this.string, formatTest.string) &&
+        Arrays.equals(this._byte, formatTest._byte) &&
+        Objects.equals(this.binary, formatTest.binary) &&
+        Objects.equals(this.date, formatTest.date) &&
+        Objects.equals(this.dateTime, formatTest.dateTime) &&
+        Objects.equals(this.uuid, formatTest.uuid) &&
+        Objects.equals(this.password, formatTest.password) &&
+        Objects.equals(this.bigDecimal, formatTest.bigDecimal);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(integer, int32, int64, number, _float, _double, string, Arrays.hashCode(_byte), binary, date, dateTime, uuid, password, bigDecimal);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class FormatTest {\n");
+    
+    sb.append("    integer: ").append(toIndentedString(integer)).append("\n");
+    sb.append("    int32: ").append(toIndentedString(int32)).append("\n");
+    sb.append("    int64: ").append(toIndentedString(int64)).append("\n");
+    sb.append("    number: ").append(toIndentedString(number)).append("\n");
+    sb.append("    _float: ").append(toIndentedString(_float)).append("\n");
+    sb.append("    _double: ").append(toIndentedString(_double)).append("\n");
+    sb.append("    string: ").append(toIndentedString(string)).append("\n");
+    sb.append("    _byte: ").append(toIndentedString(_byte)).append("\n");
+    sb.append("    binary: ").append(toIndentedString(binary)).append("\n");
+    sb.append("    date: ").append(toIndentedString(date)).append("\n");
+    sb.append("    dateTime: ").append(toIndentedString(dateTime)).append("\n");
+    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    bigDecimal: ").append(toIndentedString(bigDecimal)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2f0afa1d4aec1ab6164b371be6ca86465160c0d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
@@ -0,0 +1,106 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * HasOnlyReadOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class HasOnlyReadOnly   {
+  @JsonProperty("bar")
+  private String bar;
+
+  @JsonProperty("foo")
+  private String foo;
+
+  public HasOnlyReadOnly bar(String bar) {
+    this.bar = bar;
+    return this;
+  }
+
+  /**
+   * Get bar
+   * @return bar
+  */
+  @Schema(name = "bar", readOnly = true, defaultValue = "")
+
+
+  public String getBar() {
+    return bar;
+  }
+
+  public void setBar(String bar) {
+    this.bar = bar;
+  }
+
+  public HasOnlyReadOnly foo(String foo) {
+    this.foo = foo;
+    return this;
+  }
+
+  /**
+   * Get foo
+   * @return foo
+  */
+  @Schema(name = "foo", readOnly = true, defaultValue = "")
+
+
+  public String getFoo() {
+    return foo;
+  }
+
+  public void setFoo(String foo) {
+    this.foo = foo;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    HasOnlyReadOnly hasOnlyReadOnly = (HasOnlyReadOnly) o;
+    return Objects.equals(this.bar, hasOnlyReadOnly.bar) &&
+        Objects.equals(this.foo, hasOnlyReadOnly.foo);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(bar, foo);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class HasOnlyReadOnly {\n");
+    
+    sb.append("    bar: ").append(toIndentedString(bar)).append("\n");
+    sb.append("    foo: ").append(toIndentedString(foo)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/MapTest.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/MapTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ed29ea575eefb13a0ee868322c3bb80c0d3963bd
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/MapTest.java
@@ -0,0 +1,232 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * MapTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MapTest   {
+  @JsonProperty("map_map_of_string")
+  @Valid
+  private Map<String, Map<String, String>> mapMapOfString = null;
+
+  /**
+   * Gets or Sets inner
+   */
+  public enum InnerEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower");
+
+    private String value;
+
+    InnerEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static InnerEnum fromValue(String value) {
+      for (InnerEnum b : InnerEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("map_of_enum_string")
+  @Valid
+  private Map<String, InnerEnum> mapOfEnumString = null;
+
+  @JsonProperty("direct_map")
+  @Valid
+  private Map<String, Boolean> directMap = null;
+
+  @JsonProperty("indirect_map")
+  @Valid
+  private Map<String, Boolean> indirectMap = null;
+
+  public MapTest mapMapOfString(Map<String, Map<String, String>> mapMapOfString) {
+    this.mapMapOfString = mapMapOfString;
+    return this;
+  }
+
+  public MapTest putMapMapOfStringItem(String key, Map<String, String> mapMapOfStringItem) {
+    if (this.mapMapOfString == null) {
+      this.mapMapOfString = new HashMap<String, Map<String, String>>();
+    }
+    this.mapMapOfString.put(key, mapMapOfStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapOfString
+   * @return mapMapOfString
+  */
+  @Schema(name = "mapMapOfString", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, String>> getMapMapOfString() {
+    return mapMapOfString;
+  }
+
+  public void setMapMapOfString(Map<String, Map<String, String>> mapMapOfString) {
+    this.mapMapOfString = mapMapOfString;
+  }
+
+  public MapTest mapOfEnumString(Map<String, InnerEnum> mapOfEnumString) {
+    this.mapOfEnumString = mapOfEnumString;
+    return this;
+  }
+
+  public MapTest putMapOfEnumStringItem(String key, InnerEnum mapOfEnumStringItem) {
+    if (this.mapOfEnumString == null) {
+      this.mapOfEnumString = new HashMap<String, InnerEnum>();
+    }
+    this.mapOfEnumString.put(key, mapOfEnumStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapOfEnumString
+   * @return mapOfEnumString
+  */
+  @Schema(name = "mapOfEnumString", defaultValue = "")
+
+
+  public Map<String, InnerEnum> getMapOfEnumString() {
+    return mapOfEnumString;
+  }
+
+  public void setMapOfEnumString(Map<String, InnerEnum> mapOfEnumString) {
+    this.mapOfEnumString = mapOfEnumString;
+  }
+
+  public MapTest directMap(Map<String, Boolean> directMap) {
+    this.directMap = directMap;
+    return this;
+  }
+
+  public MapTest putDirectMapItem(String key, Boolean directMapItem) {
+    if (this.directMap == null) {
+      this.directMap = new HashMap<String, Boolean>();
+    }
+    this.directMap.put(key, directMapItem);
+    return this;
+  }
+
+  /**
+   * Get directMap
+   * @return directMap
+  */
+  @Schema(name = "directMap", defaultValue = "")
+
+
+  public Map<String, Boolean> getDirectMap() {
+    return directMap;
+  }
+
+  public void setDirectMap(Map<String, Boolean> directMap) {
+    this.directMap = directMap;
+  }
+
+  public MapTest indirectMap(Map<String, Boolean> indirectMap) {
+    this.indirectMap = indirectMap;
+    return this;
+  }
+
+  public MapTest putIndirectMapItem(String key, Boolean indirectMapItem) {
+    if (this.indirectMap == null) {
+      this.indirectMap = new HashMap<String, Boolean>();
+    }
+    this.indirectMap.put(key, indirectMapItem);
+    return this;
+  }
+
+  /**
+   * Get indirectMap
+   * @return indirectMap
+  */
+  @Schema(name = "indirectMap", defaultValue = "")
+
+
+  public Map<String, Boolean> getIndirectMap() {
+    return indirectMap;
+  }
+
+  public void setIndirectMap(Map<String, Boolean> indirectMap) {
+    this.indirectMap = indirectMap;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MapTest mapTest = (MapTest) o;
+    return Objects.equals(this.mapMapOfString, mapTest.mapMapOfString) &&
+        Objects.equals(this.mapOfEnumString, mapTest.mapOfEnumString) &&
+        Objects.equals(this.directMap, mapTest.directMap) &&
+        Objects.equals(this.indirectMap, mapTest.indirectMap);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(mapMapOfString, mapOfEnumString, directMap, indirectMap);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MapTest {\n");
+    
+    sb.append("    mapMapOfString: ").append(toIndentedString(mapMapOfString)).append("\n");
+    sb.append("    mapOfEnumString: ").append(toIndentedString(mapOfEnumString)).append("\n");
+    sb.append("    directMap: ").append(toIndentedString(directMap)).append("\n");
+    sb.append("    indirectMap: ").append(toIndentedString(indirectMap)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..e846cf63782d673d9007af45342f9d38bcc219b1
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
@@ -0,0 +1,150 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.openapitools.model.Animal;
+import org.threeten.bp.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * MixedPropertiesAndAdditionalPropertiesClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MixedPropertiesAndAdditionalPropertiesClass   {
+  @JsonProperty("uuid")
+  private UUID uuid;
+
+  @JsonProperty("dateTime")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime dateTime;
+
+  @JsonProperty("map")
+  @Valid
+  private Map<String, Animal> map = null;
+
+  public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) {
+    this.uuid = uuid;
+    return this;
+  }
+
+  /**
+   * Get uuid
+   * @return uuid
+  */
+  @Schema(name = "uuid", defaultValue = "")
+
+  @Valid
+
+  public UUID getUuid() {
+    return uuid;
+  }
+
+  public void setUuid(UUID uuid) {
+    this.uuid = uuid;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass dateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+    return this;
+  }
+
+  /**
+   * Get dateTime
+   * @return dateTime
+  */
+  @Schema(name = "dateTime", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getDateTime() {
+    return dateTime;
+  }
+
+  public void setDateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass map(Map<String, Animal> map) {
+    this.map = map;
+    return this;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal mapItem) {
+    if (this.map == null) {
+      this.map = new HashMap<String, Animal>();
+    }
+    this.map.put(key, mapItem);
+    return this;
+  }
+
+  /**
+   * Get map
+   * @return map
+  */
+  @Schema(name = "map", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Animal> getMap() {
+    return map;
+  }
+
+  public void setMap(Map<String, Animal> map) {
+    this.map = map;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MixedPropertiesAndAdditionalPropertiesClass mixedPropertiesAndAdditionalPropertiesClass = (MixedPropertiesAndAdditionalPropertiesClass) o;
+    return Objects.equals(this.uuid, mixedPropertiesAndAdditionalPropertiesClass.uuid) &&
+        Objects.equals(this.dateTime, mixedPropertiesAndAdditionalPropertiesClass.dateTime) &&
+        Objects.equals(this.map, mixedPropertiesAndAdditionalPropertiesClass.map);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(uuid, dateTime, map);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MixedPropertiesAndAdditionalPropertiesClass {\n");
+    
+    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
+    sb.append("    dateTime: ").append(toIndentedString(dateTime)).append("\n");
+    sb.append("    map: ").append(toIndentedString(map)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Model200Response.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Model200Response.java
new file mode 100644
index 0000000000000000000000000000000000000000..8aa5b96e1dae4af395c73b639851496cbda29ae3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Model200Response.java
@@ -0,0 +1,107 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model name starting with number
+ */
+@Schema(name = "200_response",description = "Model for testing model name starting with number")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Model200Response   {
+  @JsonProperty("name")
+  private Integer name;
+
+  @JsonProperty("class")
+  private String propertyClass;
+
+  public Model200Response name(Integer name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public Integer getName() {
+    return name;
+  }
+
+  public void setName(Integer name) {
+    this.name = name;
+  }
+
+  public Model200Response propertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+    return this;
+  }
+
+  /**
+   * Get propertyClass
+   * @return propertyClass
+  */
+  @Schema(name = "propertyClass", defaultValue = "")
+
+
+  public String getPropertyClass() {
+    return propertyClass;
+  }
+
+  public void setPropertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Model200Response _200response = (Model200Response) o;
+    return Objects.equals(this.name, _200response.name) &&
+        Objects.equals(this.propertyClass, _200response.propertyClass);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, propertyClass);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Model200Response {\n");
+    
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    propertyClass: ").append(toIndentedString(propertyClass)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ModelApiResponse.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ModelApiResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..86af4aba24a0e2f3f813e001b336bbc7717cf43d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ModelApiResponse.java
@@ -0,0 +1,131 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ModelApiResponse
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelApiResponse   {
+  @JsonProperty("code")
+  private Integer code;
+
+  @JsonProperty("type")
+  private String type;
+
+  @JsonProperty("message")
+  private String message;
+
+  public ModelApiResponse code(Integer code) {
+    this.code = code;
+    return this;
+  }
+
+  /**
+   * Get code
+   * @return code
+  */
+  @Schema(name = "code", defaultValue = "")
+
+
+  public Integer getCode() {
+    return code;
+  }
+
+  public void setCode(Integer code) {
+    this.code = code;
+  }
+
+  public ModelApiResponse type(String type) {
+    this.type = type;
+    return this;
+  }
+
+  /**
+   * Get type
+   * @return type
+  */
+  @Schema(name = "type", defaultValue = "")
+
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public ModelApiResponse message(String message) {
+    this.message = message;
+    return this;
+  }
+
+  /**
+   * Get message
+   * @return message
+  */
+  @Schema(name = "message", defaultValue = "")
+
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelApiResponse _apiResponse = (ModelApiResponse) o;
+    return Objects.equals(this.code, _apiResponse.code) &&
+        Objects.equals(this.type, _apiResponse.type) &&
+        Objects.equals(this.message, _apiResponse.message);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(code, type, message);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelApiResponse {\n");
+    
+    sb.append("    code: ").append(toIndentedString(code)).append("\n");
+    sb.append("    type: ").append(toIndentedString(type)).append("\n");
+    sb.append("    message: ").append(toIndentedString(message)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ModelReturn.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ModelReturn.java
new file mode 100644
index 0000000000000000000000000000000000000000..06bc8e6627cf3bed82ce744aab4fa450da388c1e
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ModelReturn.java
@@ -0,0 +1,82 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing reserved words
+ */
+@Schema(name = "Return",description = "Model for testing reserved words")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelReturn   {
+  @JsonProperty("return")
+  private Integer _return;
+
+  public ModelReturn _return(Integer _return) {
+    this._return = _return;
+    return this;
+  }
+
+  /**
+   * Get _return
+   * @return _return
+  */
+  @Schema(name = "_return", defaultValue = "")
+
+
+  public Integer getReturn() {
+    return _return;
+  }
+
+  public void setReturn(Integer _return) {
+    this._return = _return;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelReturn _return = (ModelReturn) o;
+    return Objects.equals(this._return, _return._return);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(_return);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelReturn {\n");
+    
+    sb.append("    _return: ").append(toIndentedString(_return)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Name.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Name.java
new file mode 100644
index 0000000000000000000000000000000000000000..5e755ef8dd184c97fe1f672091c1e39ddd400ef2
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Name.java
@@ -0,0 +1,158 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model name same as property name
+ */
+@Schema(name = "Name",description = "Model for testing model name same as property name")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Name   {
+  @JsonProperty("name")
+  private Integer name;
+
+  @JsonProperty("snake_case")
+  private Integer snakeCase;
+
+  @JsonProperty("property")
+  private String property;
+
+  @JsonProperty("123Number")
+  private Integer _123number;
+
+  public Name name(Integer name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getName() {
+    return name;
+  }
+
+  public void setName(Integer name) {
+    this.name = name;
+  }
+
+  public Name snakeCase(Integer snakeCase) {
+    this.snakeCase = snakeCase;
+    return this;
+  }
+
+  /**
+   * Get snakeCase
+   * @return snakeCase
+  */
+  @Schema(name = "snakeCase", readOnly = true, defaultValue = "")
+
+
+  public Integer getSnakeCase() {
+    return snakeCase;
+  }
+
+  public void setSnakeCase(Integer snakeCase) {
+    this.snakeCase = snakeCase;
+  }
+
+  public Name property(String property) {
+    this.property = property;
+    return this;
+  }
+
+  /**
+   * Get property
+   * @return property
+  */
+  @Schema(name = "property", defaultValue = "")
+
+
+  public String getProperty() {
+    return property;
+  }
+
+  public void setProperty(String property) {
+    this.property = property;
+  }
+
+  public Name _123number(Integer _123number) {
+    this._123number = _123number;
+    return this;
+  }
+
+  /**
+   * Get _123number
+   * @return _123number
+  */
+  @Schema(name = "_123number", readOnly = true, defaultValue = "")
+
+
+  public Integer get123number() {
+    return _123number;
+  }
+
+  public void set123number(Integer _123number) {
+    this._123number = _123number;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Name name = (Name) o;
+    return Objects.equals(this.name, name.name) &&
+        Objects.equals(this.snakeCase, name.snakeCase) &&
+        Objects.equals(this.property, name.property) &&
+        Objects.equals(this._123number, name._123number);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, snakeCase, property, _123number);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Name {\n");
+    
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    snakeCase: ").append(toIndentedString(snakeCase)).append("\n");
+    sb.append("    property: ").append(toIndentedString(property)).append("\n");
+    sb.append("    _123number: ").append(toIndentedString(_123number)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/NumberOnly.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/NumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..88b9009b1dc14b64c9808bdb2bc65e0b7196337f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/NumberOnly.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * NumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class NumberOnly   {
+  @JsonProperty("JustNumber")
+  private BigDecimal justNumber;
+
+  public NumberOnly justNumber(BigDecimal justNumber) {
+    this.justNumber = justNumber;
+    return this;
+  }
+
+  /**
+   * Get justNumber
+   * @return justNumber
+  */
+  @Schema(name = "justNumber", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getJustNumber() {
+    return justNumber;
+  }
+
+  public void setJustNumber(BigDecimal justNumber) {
+    this.justNumber = justNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    NumberOnly numberOnly = (NumberOnly) o;
+    return Objects.equals(this.justNumber, numberOnly.justNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(justNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class NumberOnly {\n");
+    
+    sb.append("    justNumber: ").append(toIndentedString(justNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Order.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Order.java
new file mode 100644
index 0000000000000000000000000000000000000000..5c9bb7ae7e4a93ec0cea6a5330d596cf55f2f28d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Order.java
@@ -0,0 +1,247 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.threeten.bp.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Order
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Order   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("petId")
+  private Long petId;
+
+  @JsonProperty("quantity")
+  private Integer quantity;
+
+  @JsonProperty("shipDate")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime shipDate;
+
+  /**
+   * Order Status
+   */
+  public enum StatusEnum {
+    PLACED("placed"),
+    
+    APPROVED("approved"),
+    
+    DELIVERED("delivered");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  @JsonProperty("complete")
+  private Boolean complete = false;
+
+  public Order id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Order petId(Long petId) {
+    this.petId = petId;
+    return this;
+  }
+
+  /**
+   * Get petId
+   * @return petId
+  */
+  @Schema(name = "petId", defaultValue = "")
+
+
+  public Long getPetId() {
+    return petId;
+  }
+
+  public void setPetId(Long petId) {
+    this.petId = petId;
+  }
+
+  public Order quantity(Integer quantity) {
+    this.quantity = quantity;
+    return this;
+  }
+
+  /**
+   * Get quantity
+   * @return quantity
+  */
+  @Schema(name = "quantity", defaultValue = "")
+
+
+  public Integer getQuantity() {
+    return quantity;
+  }
+
+  public void setQuantity(Integer quantity) {
+    this.quantity = quantity;
+  }
+
+  public Order shipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+    return this;
+  }
+
+  /**
+   * Get shipDate
+   * @return shipDate
+  */
+  @Schema(name = "shipDate", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getShipDate() {
+    return shipDate;
+  }
+
+  public void setShipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+  }
+
+  public Order status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Order Status
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "Order Status")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+  public Order complete(Boolean complete) {
+    this.complete = complete;
+    return this;
+  }
+
+  /**
+   * Get complete
+   * @return complete
+  */
+  @Schema(name = "complete", defaultValue = "")
+
+
+  public Boolean getComplete() {
+    return complete;
+  }
+
+  public void setComplete(Boolean complete) {
+    this.complete = complete;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Order order = (Order) o;
+    return Objects.equals(this.id, order.id) &&
+        Objects.equals(this.petId, order.petId) &&
+        Objects.equals(this.quantity, order.quantity) &&
+        Objects.equals(this.shipDate, order.shipDate) &&
+        Objects.equals(this.status, order.status) &&
+        Objects.equals(this.complete, order.complete);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, petId, quantity, shipDate, status, complete);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Order {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    petId: ").append(toIndentedString(petId)).append("\n");
+    sb.append("    quantity: ").append(toIndentedString(quantity)).append("\n");
+    sb.append("    shipDate: ").append(toIndentedString(shipDate)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    complete: ").append(toIndentedString(complete)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/OuterComposite.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/OuterComposite.java
new file mode 100644
index 0000000000000000000000000000000000000000..cea0bf2f757878a4a7d64aa376f6c08422025791
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/OuterComposite.java
@@ -0,0 +1,133 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * OuterComposite
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class OuterComposite   {
+  @JsonProperty("my_number")
+  private BigDecimal myNumber;
+
+  @JsonProperty("my_string")
+  private String myString;
+
+  @JsonProperty("my_boolean")
+  private Boolean myBoolean;
+
+  public OuterComposite myNumber(BigDecimal myNumber) {
+    this.myNumber = myNumber;
+    return this;
+  }
+
+  /**
+   * Get myNumber
+   * @return myNumber
+  */
+  @Schema(name = "myNumber", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getMyNumber() {
+    return myNumber;
+  }
+
+  public void setMyNumber(BigDecimal myNumber) {
+    this.myNumber = myNumber;
+  }
+
+  public OuterComposite myString(String myString) {
+    this.myString = myString;
+    return this;
+  }
+
+  /**
+   * Get myString
+   * @return myString
+  */
+  @Schema(name = "myString", defaultValue = "")
+
+
+  public String getMyString() {
+    return myString;
+  }
+
+  public void setMyString(String myString) {
+    this.myString = myString;
+  }
+
+  public OuterComposite myBoolean(Boolean myBoolean) {
+    this.myBoolean = myBoolean;
+    return this;
+  }
+
+  /**
+   * Get myBoolean
+   * @return myBoolean
+  */
+  @Schema(name = "myBoolean", defaultValue = "")
+
+
+  public Boolean getMyBoolean() {
+    return myBoolean;
+  }
+
+  public void setMyBoolean(Boolean myBoolean) {
+    this.myBoolean = myBoolean;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    OuterComposite outerComposite = (OuterComposite) o;
+    return Objects.equals(this.myNumber, outerComposite.myNumber) &&
+        Objects.equals(this.myString, outerComposite.myString) &&
+        Objects.equals(this.myBoolean, outerComposite.myBoolean);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(myNumber, myString, myBoolean);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class OuterComposite {\n");
+    
+    sb.append("    myNumber: ").append(toIndentedString(myNumber)).append("\n");
+    sb.append("    myString: ").append(toIndentedString(myString)).append("\n");
+    sb.append("    myBoolean: ").append(toIndentedString(myBoolean)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/OuterEnum.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/OuterEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..72e7826828f393bce54154b9fcd9a2bc10b8ad47
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/OuterEnum.java
@@ -0,0 +1,53 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonValue;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets OuterEnum
+ */
+public enum OuterEnum {
+  
+  PLACED("placed"),
+  
+  APPROVED("approved"),
+  
+  DELIVERED("delivered");
+
+  private String value;
+
+  OuterEnum(String value) {
+    this.value = value;
+  }
+
+  @JsonValue
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(value);
+  }
+
+  @JsonCreator
+  public static OuterEnum fromValue(String value) {
+    for (OuterEnum b : OuterEnum.values()) {
+      if (b.value.equals(value)) {
+        return b;
+      }
+    }
+    throw new IllegalArgumentException("Unexpected value '" + value + "'");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Pet.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Pet.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ca656bd9170ce6a3ed78a738ac97c22fdbaf4a6
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Pet.java
@@ -0,0 +1,274 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import org.openapitools.model.Category;
+import org.openapitools.model.Tag;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Pet
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Pet   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("category")
+  private Category category;
+
+  @JsonProperty("name")
+  private String name;
+
+  @JsonProperty("photoUrls")
+  @Valid
+  private Set<String> photoUrls = new LinkedHashSet<String>();
+
+  @JsonProperty("tags")
+  @Valid
+  private List<Tag> tags = null;
+
+  /**
+   * pet status in the store
+   */
+  public enum StatusEnum {
+    AVAILABLE("available"),
+    
+    PENDING("pending"),
+    
+    SOLD("sold");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  public Pet id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Pet category(Category category) {
+    this.category = category;
+    return this;
+  }
+
+  /**
+   * Get category
+   * @return category
+  */
+  @Schema(name = "category", defaultValue = "")
+
+  @Valid
+
+  public Category getCategory() {
+    return category;
+  }
+
+  public void setCategory(Category category) {
+    this.category = category;
+  }
+
+  public Pet name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", example = "doggie", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public Pet photoUrls(Set<String> photoUrls) {
+    this.photoUrls = photoUrls;
+    return this;
+  }
+
+  public Pet addPhotoUrlsItem(String photoUrlsItem) {
+    if (this.photoUrls == null) {
+      this.photoUrls = new LinkedHashSet<String>();
+    }
+    this.photoUrls.add(photoUrlsItem);
+    return this;
+  }
+
+  /**
+   * Get photoUrls
+   * @return photoUrls
+  */
+  @Schema(name = "photoUrls", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Set<String> getPhotoUrls() {
+    return photoUrls;
+  }
+
+  @JsonDeserialize(as = LinkedHashSet.class)
+  public void setPhotoUrls(Set<String> photoUrls) {
+    this.photoUrls = photoUrls;
+  }
+
+  public Pet tags(List<Tag> tags) {
+    this.tags = tags;
+    return this;
+  }
+
+  public Pet addTagsItem(Tag tagsItem) {
+    if (this.tags == null) {
+      this.tags = new ArrayList<Tag>();
+    }
+    this.tags.add(tagsItem);
+    return this;
+  }
+
+  /**
+   * Get tags
+   * @return tags
+  */
+  @Schema(name = "tags", defaultValue = "")
+
+  @Valid
+
+  public List<Tag> getTags() {
+    return tags;
+  }
+
+  public void setTags(List<Tag> tags) {
+    this.tags = tags;
+  }
+
+  public Pet status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * pet status in the store
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "pet status in the store")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Pet pet = (Pet) o;
+    return Objects.equals(this.id, pet.id) &&
+        Objects.equals(this.category, pet.category) &&
+        Objects.equals(this.name, pet.name) &&
+        Objects.equals(this.photoUrls, pet.photoUrls) &&
+        Objects.equals(this.tags, pet.tags) &&
+        Objects.equals(this.status, pet.status);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, category, name, photoUrls, tags, status);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Pet {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    category: ").append(toIndentedString(category)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    photoUrls: ").append(toIndentedString(photoUrls)).append("\n");
+    sb.append("    tags: ").append(toIndentedString(tags)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ReadOnlyFirst.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ReadOnlyFirst.java
new file mode 100644
index 0000000000000000000000000000000000000000..15b221c739bea12746b2295cbc117b59a7c2475a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/ReadOnlyFirst.java
@@ -0,0 +1,106 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ReadOnlyFirst
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ReadOnlyFirst   {
+  @JsonProperty("bar")
+  private String bar;
+
+  @JsonProperty("baz")
+  private String baz;
+
+  public ReadOnlyFirst bar(String bar) {
+    this.bar = bar;
+    return this;
+  }
+
+  /**
+   * Get bar
+   * @return bar
+  */
+  @Schema(name = "bar", readOnly = true, defaultValue = "")
+
+
+  public String getBar() {
+    return bar;
+  }
+
+  public void setBar(String bar) {
+    this.bar = bar;
+  }
+
+  public ReadOnlyFirst baz(String baz) {
+    this.baz = baz;
+    return this;
+  }
+
+  /**
+   * Get baz
+   * @return baz
+  */
+  @Schema(name = "baz", defaultValue = "")
+
+
+  public String getBaz() {
+    return baz;
+  }
+
+  public void setBaz(String baz) {
+    this.baz = baz;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ReadOnlyFirst readOnlyFirst = (ReadOnlyFirst) o;
+    return Objects.equals(this.bar, readOnlyFirst.bar) &&
+        Objects.equals(this.baz, readOnlyFirst.baz);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(bar, baz);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ReadOnlyFirst {\n");
+    
+    sb.append("    bar: ").append(toIndentedString(bar)).append("\n");
+    sb.append("    baz: ").append(toIndentedString(baz)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/SpecialModelName.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/SpecialModelName.java
new file mode 100644
index 0000000000000000000000000000000000000000..56ced4dc6f0ae9f8ce5c16e7fd8d35f2fca0189d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/SpecialModelName.java
@@ -0,0 +1,81 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * SpecialModelName
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class SpecialModelName   {
+  @JsonProperty("$special[property.name]")
+  private Long $specialPropertyName;
+
+  public SpecialModelName $specialPropertyName(Long $specialPropertyName) {
+    this.$specialPropertyName = $specialPropertyName;
+    return this;
+  }
+
+  /**
+   * Get $specialPropertyName
+   * @return $specialPropertyName
+  */
+  @Schema(name = "$specialPropertyName", defaultValue = "")
+
+
+  public Long get$SpecialPropertyName() {
+    return $specialPropertyName;
+  }
+
+  public void set$SpecialPropertyName(Long $specialPropertyName) {
+    this.$specialPropertyName = $specialPropertyName;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SpecialModelName $specialModelName = (SpecialModelName) o;
+    return Objects.equals(this.$specialPropertyName, $specialModelName.$specialPropertyName);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash($specialPropertyName);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SpecialModelName {\n");
+    
+    sb.append("    $specialPropertyName: ").append(toIndentedString($specialPropertyName)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Tag.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Tag.java
new file mode 100644
index 0000000000000000000000000000000000000000..f98b6a0b281dc5de909cb5d24beb15595ea176be
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/Tag.java
@@ -0,0 +1,106 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Tag
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Tag   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Tag id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Tag name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Tag tag = (Tag) o;
+    return Objects.equals(this.id, tag.id) &&
+        Objects.equals(this.name, tag.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Tag {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/TypeHolderDefault.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/TypeHolderDefault.java
new file mode 100644
index 0000000000000000000000000000000000000000..d346c36b80aab15d536e65294ea9607e665d95be
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/TypeHolderDefault.java
@@ -0,0 +1,199 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * TypeHolderDefault
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class TypeHolderDefault   {
+  @JsonProperty("string_item")
+  private String stringItem = "what";
+
+  @JsonProperty("number_item")
+  private BigDecimal numberItem;
+
+  @JsonProperty("integer_item")
+  private Integer integerItem;
+
+  @JsonProperty("bool_item")
+  private Boolean boolItem = true;
+
+  @JsonProperty("array_item")
+  @Valid
+  private List<Integer> arrayItem = new ArrayList<Integer>();
+
+  public TypeHolderDefault stringItem(String stringItem) {
+    this.stringItem = stringItem;
+    return this;
+  }
+
+  /**
+   * Get stringItem
+   * @return stringItem
+  */
+  @Schema(name = "stringItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getStringItem() {
+    return stringItem;
+  }
+
+  public void setStringItem(String stringItem) {
+    this.stringItem = stringItem;
+  }
+
+  public TypeHolderDefault numberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+    return this;
+  }
+
+  /**
+   * Get numberItem
+   * @return numberItem
+  */
+  @Schema(name = "numberItem", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public BigDecimal getNumberItem() {
+    return numberItem;
+  }
+
+  public void setNumberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+  }
+
+  public TypeHolderDefault integerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+    return this;
+  }
+
+  /**
+   * Get integerItem
+   * @return integerItem
+  */
+  @Schema(name = "integerItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getIntegerItem() {
+    return integerItem;
+  }
+
+  public void setIntegerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+  }
+
+  public TypeHolderDefault boolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+    return this;
+  }
+
+  /**
+   * Get boolItem
+   * @return boolItem
+  */
+  @Schema(name = "boolItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Boolean getBoolItem() {
+    return boolItem;
+  }
+
+  public void setBoolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+  }
+
+  public TypeHolderDefault arrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+    return this;
+  }
+
+  public TypeHolderDefault addArrayItemItem(Integer arrayItemItem) {
+    if (this.arrayItem == null) {
+      this.arrayItem = new ArrayList<Integer>();
+    }
+    this.arrayItem.add(arrayItemItem);
+    return this;
+  }
+
+  /**
+   * Get arrayItem
+   * @return arrayItem
+  */
+  @Schema(name = "arrayItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<Integer> getArrayItem() {
+    return arrayItem;
+  }
+
+  public void setArrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TypeHolderDefault typeHolderDefault = (TypeHolderDefault) o;
+    return Objects.equals(this.stringItem, typeHolderDefault.stringItem) &&
+        Objects.equals(this.numberItem, typeHolderDefault.numberItem) &&
+        Objects.equals(this.integerItem, typeHolderDefault.integerItem) &&
+        Objects.equals(this.boolItem, typeHolderDefault.boolItem) &&
+        Objects.equals(this.arrayItem, typeHolderDefault.arrayItem);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(stringItem, numberItem, integerItem, boolItem, arrayItem);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TypeHolderDefault {\n");
+    
+    sb.append("    stringItem: ").append(toIndentedString(stringItem)).append("\n");
+    sb.append("    numberItem: ").append(toIndentedString(numberItem)).append("\n");
+    sb.append("    integerItem: ").append(toIndentedString(integerItem)).append("\n");
+    sb.append("    boolItem: ").append(toIndentedString(boolItem)).append("\n");
+    sb.append("    arrayItem: ").append(toIndentedString(arrayItem)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/TypeHolderExample.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/TypeHolderExample.java
new file mode 100644
index 0000000000000000000000000000000000000000..c62a0e4dc71f70d48b52bc7e6552d7a0bdf8ce92
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/TypeHolderExample.java
@@ -0,0 +1,225 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * TypeHolderExample
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class TypeHolderExample   {
+  @JsonProperty("string_item")
+  private String stringItem;
+
+  @JsonProperty("number_item")
+  private BigDecimal numberItem;
+
+  @JsonProperty("float_item")
+  private Float floatItem;
+
+  @JsonProperty("integer_item")
+  private Integer integerItem;
+
+  @JsonProperty("bool_item")
+  private Boolean boolItem;
+
+  @JsonProperty("array_item")
+  @Valid
+  private List<Integer> arrayItem = new ArrayList<Integer>();
+
+  public TypeHolderExample stringItem(String stringItem) {
+    this.stringItem = stringItem;
+    return this;
+  }
+
+  /**
+   * Get stringItem
+   * @return stringItem
+  */
+  @Schema(name = "stringItem", example = "what", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getStringItem() {
+    return stringItem;
+  }
+
+  public void setStringItem(String stringItem) {
+    this.stringItem = stringItem;
+  }
+
+  public TypeHolderExample numberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+    return this;
+  }
+
+  /**
+   * Get numberItem
+   * @return numberItem
+  */
+  @Schema(name = "numberItem", example = "1.234", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public BigDecimal getNumberItem() {
+    return numberItem;
+  }
+
+  public void setNumberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+  }
+
+  public TypeHolderExample floatItem(Float floatItem) {
+    this.floatItem = floatItem;
+    return this;
+  }
+
+  /**
+   * Get floatItem
+   * @return floatItem
+  */
+  @Schema(name = "floatItem", example = "1.234", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Float getFloatItem() {
+    return floatItem;
+  }
+
+  public void setFloatItem(Float floatItem) {
+    this.floatItem = floatItem;
+  }
+
+  public TypeHolderExample integerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+    return this;
+  }
+
+  /**
+   * Get integerItem
+   * @return integerItem
+  */
+  @Schema(name = "integerItem", example = "-2", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getIntegerItem() {
+    return integerItem;
+  }
+
+  public void setIntegerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+  }
+
+  public TypeHolderExample boolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+    return this;
+  }
+
+  /**
+   * Get boolItem
+   * @return boolItem
+  */
+  @Schema(name = "boolItem", example = "true", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Boolean getBoolItem() {
+    return boolItem;
+  }
+
+  public void setBoolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+  }
+
+  public TypeHolderExample arrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+    return this;
+  }
+
+  public TypeHolderExample addArrayItemItem(Integer arrayItemItem) {
+    if (this.arrayItem == null) {
+      this.arrayItem = new ArrayList<Integer>();
+    }
+    this.arrayItem.add(arrayItemItem);
+    return this;
+  }
+
+  /**
+   * Get arrayItem
+   * @return arrayItem
+  */
+  @Schema(name = "arrayItem", example = "[0, 1, 2, 3]", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<Integer> getArrayItem() {
+    return arrayItem;
+  }
+
+  public void setArrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TypeHolderExample typeHolderExample = (TypeHolderExample) o;
+    return Objects.equals(this.stringItem, typeHolderExample.stringItem) &&
+        Objects.equals(this.numberItem, typeHolderExample.numberItem) &&
+        Objects.equals(this.floatItem, typeHolderExample.floatItem) &&
+        Objects.equals(this.integerItem, typeHolderExample.integerItem) &&
+        Objects.equals(this.boolItem, typeHolderExample.boolItem) &&
+        Objects.equals(this.arrayItem, typeHolderExample.arrayItem);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(stringItem, numberItem, floatItem, integerItem, boolItem, arrayItem);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TypeHolderExample {\n");
+    
+    sb.append("    stringItem: ").append(toIndentedString(stringItem)).append("\n");
+    sb.append("    numberItem: ").append(toIndentedString(numberItem)).append("\n");
+    sb.append("    floatItem: ").append(toIndentedString(floatItem)).append("\n");
+    sb.append("    integerItem: ").append(toIndentedString(integerItem)).append("\n");
+    sb.append("    boolItem: ").append(toIndentedString(boolItem)).append("\n");
+    sb.append("    arrayItem: ").append(toIndentedString(arrayItem)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/User.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..155bdf978d59037c59a11e89178ebcfb1a80f8c8
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/User.java
@@ -0,0 +1,256 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * User
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class User   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("username")
+  private String username;
+
+  @JsonProperty("firstName")
+  private String firstName;
+
+  @JsonProperty("lastName")
+  private String lastName;
+
+  @JsonProperty("email")
+  private String email;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("phone")
+  private String phone;
+
+  @JsonProperty("userStatus")
+  private Integer userStatus;
+
+  public User id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public User username(String username) {
+    this.username = username;
+    return this;
+  }
+
+  /**
+   * Get username
+   * @return username
+  */
+  @Schema(name = "username", defaultValue = "")
+
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public User firstName(String firstName) {
+    this.firstName = firstName;
+    return this;
+  }
+
+  /**
+   * Get firstName
+   * @return firstName
+  */
+  @Schema(name = "firstName", defaultValue = "")
+
+
+  public String getFirstName() {
+    return firstName;
+  }
+
+  public void setFirstName(String firstName) {
+    this.firstName = firstName;
+  }
+
+  public User lastName(String lastName) {
+    this.lastName = lastName;
+    return this;
+  }
+
+  /**
+   * Get lastName
+   * @return lastName
+  */
+  @Schema(name = "lastName", defaultValue = "")
+
+
+  public String getLastName() {
+    return lastName;
+  }
+
+  public void setLastName(String lastName) {
+    this.lastName = lastName;
+  }
+
+  public User email(String email) {
+    this.email = email;
+    return this;
+  }
+
+  /**
+   * Get email
+   * @return email
+  */
+  @Schema(name = "email", defaultValue = "")
+
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+  public User password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", defaultValue = "")
+
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public User phone(String phone) {
+    this.phone = phone;
+    return this;
+  }
+
+  /**
+   * Get phone
+   * @return phone
+  */
+  @Schema(name = "phone", defaultValue = "")
+
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public User userStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+    return this;
+  }
+
+  /**
+   * User Status
+   * @return userStatus
+  */
+  @Schema(name = "userStatus", defaultValue = "User Status")
+
+
+  public Integer getUserStatus() {
+    return userStatus;
+  }
+
+  public void setUserStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    User user = (User) o;
+    return Objects.equals(this.id, user.id) &&
+        Objects.equals(this.username, user.username) &&
+        Objects.equals(this.firstName, user.firstName) &&
+        Objects.equals(this.lastName, user.lastName) &&
+        Objects.equals(this.email, user.email) &&
+        Objects.equals(this.password, user.password) &&
+        Objects.equals(this.phone, user.phone) &&
+        Objects.equals(this.userStatus, user.userStatus);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class User {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    username: ").append(toIndentedString(username)).append("\n");
+    sb.append("    firstName: ").append(toIndentedString(firstName)).append("\n");
+    sb.append("    lastName: ").append(toIndentedString(lastName)).append("\n");
+    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    phone: ").append(toIndentedString(phone)).append("\n");
+    sb.append("    userStatus: ").append(toIndentedString(userStatus)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/XmlItem.java b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/XmlItem.java
new file mode 100644
index 0000000000000000000000000000000000000000..9f829a1a26fe0662a88cf439f39deb6b5473644a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/XmlItem.java
@@ -0,0 +1,870 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * XmlItem
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class XmlItem   {
+  @JsonProperty("attribute_string")
+  private String attributeString;
+
+  @JsonProperty("attribute_number")
+  private BigDecimal attributeNumber;
+
+  @JsonProperty("attribute_integer")
+  private Integer attributeInteger;
+
+  @JsonProperty("attribute_boolean")
+  private Boolean attributeBoolean;
+
+  @JsonProperty("wrapped_array")
+  @Valid
+  private List<Integer> wrappedArray = null;
+
+  @JsonProperty("name_string")
+  private String nameString;
+
+  @JsonProperty("name_number")
+  private BigDecimal nameNumber;
+
+  @JsonProperty("name_integer")
+  private Integer nameInteger;
+
+  @JsonProperty("name_boolean")
+  private Boolean nameBoolean;
+
+  @JsonProperty("name_array")
+  @Valid
+  private List<Integer> nameArray = null;
+
+  @JsonProperty("name_wrapped_array")
+  @Valid
+  private List<Integer> nameWrappedArray = null;
+
+  @JsonProperty("prefix_string")
+  private String prefixString;
+
+  @JsonProperty("prefix_number")
+  private BigDecimal prefixNumber;
+
+  @JsonProperty("prefix_integer")
+  private Integer prefixInteger;
+
+  @JsonProperty("prefix_boolean")
+  private Boolean prefixBoolean;
+
+  @JsonProperty("prefix_array")
+  @Valid
+  private List<Integer> prefixArray = null;
+
+  @JsonProperty("prefix_wrapped_array")
+  @Valid
+  private List<Integer> prefixWrappedArray = null;
+
+  @JsonProperty("namespace_string")
+  private String namespaceString;
+
+  @JsonProperty("namespace_number")
+  private BigDecimal namespaceNumber;
+
+  @JsonProperty("namespace_integer")
+  private Integer namespaceInteger;
+
+  @JsonProperty("namespace_boolean")
+  private Boolean namespaceBoolean;
+
+  @JsonProperty("namespace_array")
+  @Valid
+  private List<Integer> namespaceArray = null;
+
+  @JsonProperty("namespace_wrapped_array")
+  @Valid
+  private List<Integer> namespaceWrappedArray = null;
+
+  @JsonProperty("prefix_ns_string")
+  private String prefixNsString;
+
+  @JsonProperty("prefix_ns_number")
+  private BigDecimal prefixNsNumber;
+
+  @JsonProperty("prefix_ns_integer")
+  private Integer prefixNsInteger;
+
+  @JsonProperty("prefix_ns_boolean")
+  private Boolean prefixNsBoolean;
+
+  @JsonProperty("prefix_ns_array")
+  @Valid
+  private List<Integer> prefixNsArray = null;
+
+  @JsonProperty("prefix_ns_wrapped_array")
+  @Valid
+  private List<Integer> prefixNsWrappedArray = null;
+
+  public XmlItem attributeString(String attributeString) {
+    this.attributeString = attributeString;
+    return this;
+  }
+
+  /**
+   * Get attributeString
+   * @return attributeString
+  */
+  @Schema(name = "attributeString", example = "string", defaultValue = "")
+
+
+  public String getAttributeString() {
+    return attributeString;
+  }
+
+  public void setAttributeString(String attributeString) {
+    this.attributeString = attributeString;
+  }
+
+  public XmlItem attributeNumber(BigDecimal attributeNumber) {
+    this.attributeNumber = attributeNumber;
+    return this;
+  }
+
+  /**
+   * Get attributeNumber
+   * @return attributeNumber
+  */
+  @Schema(name = "attributeNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getAttributeNumber() {
+    return attributeNumber;
+  }
+
+  public void setAttributeNumber(BigDecimal attributeNumber) {
+    this.attributeNumber = attributeNumber;
+  }
+
+  public XmlItem attributeInteger(Integer attributeInteger) {
+    this.attributeInteger = attributeInteger;
+    return this;
+  }
+
+  /**
+   * Get attributeInteger
+   * @return attributeInteger
+  */
+  @Schema(name = "attributeInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getAttributeInteger() {
+    return attributeInteger;
+  }
+
+  public void setAttributeInteger(Integer attributeInteger) {
+    this.attributeInteger = attributeInteger;
+  }
+
+  public XmlItem attributeBoolean(Boolean attributeBoolean) {
+    this.attributeBoolean = attributeBoolean;
+    return this;
+  }
+
+  /**
+   * Get attributeBoolean
+   * @return attributeBoolean
+  */
+  @Schema(name = "attributeBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getAttributeBoolean() {
+    return attributeBoolean;
+  }
+
+  public void setAttributeBoolean(Boolean attributeBoolean) {
+    this.attributeBoolean = attributeBoolean;
+  }
+
+  public XmlItem wrappedArray(List<Integer> wrappedArray) {
+    this.wrappedArray = wrappedArray;
+    return this;
+  }
+
+  public XmlItem addWrappedArrayItem(Integer wrappedArrayItem) {
+    if (this.wrappedArray == null) {
+      this.wrappedArray = new ArrayList<Integer>();
+    }
+    this.wrappedArray.add(wrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get wrappedArray
+   * @return wrappedArray
+  */
+  @Schema(name = "wrappedArray", defaultValue = "")
+
+
+  public List<Integer> getWrappedArray() {
+    return wrappedArray;
+  }
+
+  public void setWrappedArray(List<Integer> wrappedArray) {
+    this.wrappedArray = wrappedArray;
+  }
+
+  public XmlItem nameString(String nameString) {
+    this.nameString = nameString;
+    return this;
+  }
+
+  /**
+   * Get nameString
+   * @return nameString
+  */
+  @Schema(name = "nameString", example = "string", defaultValue = "")
+
+
+  public String getNameString() {
+    return nameString;
+  }
+
+  public void setNameString(String nameString) {
+    this.nameString = nameString;
+  }
+
+  public XmlItem nameNumber(BigDecimal nameNumber) {
+    this.nameNumber = nameNumber;
+    return this;
+  }
+
+  /**
+   * Get nameNumber
+   * @return nameNumber
+  */
+  @Schema(name = "nameNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getNameNumber() {
+    return nameNumber;
+  }
+
+  public void setNameNumber(BigDecimal nameNumber) {
+    this.nameNumber = nameNumber;
+  }
+
+  public XmlItem nameInteger(Integer nameInteger) {
+    this.nameInteger = nameInteger;
+    return this;
+  }
+
+  /**
+   * Get nameInteger
+   * @return nameInteger
+  */
+  @Schema(name = "nameInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getNameInteger() {
+    return nameInteger;
+  }
+
+  public void setNameInteger(Integer nameInteger) {
+    this.nameInteger = nameInteger;
+  }
+
+  public XmlItem nameBoolean(Boolean nameBoolean) {
+    this.nameBoolean = nameBoolean;
+    return this;
+  }
+
+  /**
+   * Get nameBoolean
+   * @return nameBoolean
+  */
+  @Schema(name = "nameBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getNameBoolean() {
+    return nameBoolean;
+  }
+
+  public void setNameBoolean(Boolean nameBoolean) {
+    this.nameBoolean = nameBoolean;
+  }
+
+  public XmlItem nameArray(List<Integer> nameArray) {
+    this.nameArray = nameArray;
+    return this;
+  }
+
+  public XmlItem addNameArrayItem(Integer nameArrayItem) {
+    if (this.nameArray == null) {
+      this.nameArray = new ArrayList<Integer>();
+    }
+    this.nameArray.add(nameArrayItem);
+    return this;
+  }
+
+  /**
+   * Get nameArray
+   * @return nameArray
+  */
+  @Schema(name = "nameArray", defaultValue = "")
+
+
+  public List<Integer> getNameArray() {
+    return nameArray;
+  }
+
+  public void setNameArray(List<Integer> nameArray) {
+    this.nameArray = nameArray;
+  }
+
+  public XmlItem nameWrappedArray(List<Integer> nameWrappedArray) {
+    this.nameWrappedArray = nameWrappedArray;
+    return this;
+  }
+
+  public XmlItem addNameWrappedArrayItem(Integer nameWrappedArrayItem) {
+    if (this.nameWrappedArray == null) {
+      this.nameWrappedArray = new ArrayList<Integer>();
+    }
+    this.nameWrappedArray.add(nameWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get nameWrappedArray
+   * @return nameWrappedArray
+  */
+  @Schema(name = "nameWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getNameWrappedArray() {
+    return nameWrappedArray;
+  }
+
+  public void setNameWrappedArray(List<Integer> nameWrappedArray) {
+    this.nameWrappedArray = nameWrappedArray;
+  }
+
+  public XmlItem prefixString(String prefixString) {
+    this.prefixString = prefixString;
+    return this;
+  }
+
+  /**
+   * Get prefixString
+   * @return prefixString
+  */
+  @Schema(name = "prefixString", example = "string", defaultValue = "")
+
+
+  public String getPrefixString() {
+    return prefixString;
+  }
+
+  public void setPrefixString(String prefixString) {
+    this.prefixString = prefixString;
+  }
+
+  public XmlItem prefixNumber(BigDecimal prefixNumber) {
+    this.prefixNumber = prefixNumber;
+    return this;
+  }
+
+  /**
+   * Get prefixNumber
+   * @return prefixNumber
+  */
+  @Schema(name = "prefixNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getPrefixNumber() {
+    return prefixNumber;
+  }
+
+  public void setPrefixNumber(BigDecimal prefixNumber) {
+    this.prefixNumber = prefixNumber;
+  }
+
+  public XmlItem prefixInteger(Integer prefixInteger) {
+    this.prefixInteger = prefixInteger;
+    return this;
+  }
+
+  /**
+   * Get prefixInteger
+   * @return prefixInteger
+  */
+  @Schema(name = "prefixInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getPrefixInteger() {
+    return prefixInteger;
+  }
+
+  public void setPrefixInteger(Integer prefixInteger) {
+    this.prefixInteger = prefixInteger;
+  }
+
+  public XmlItem prefixBoolean(Boolean prefixBoolean) {
+    this.prefixBoolean = prefixBoolean;
+    return this;
+  }
+
+  /**
+   * Get prefixBoolean
+   * @return prefixBoolean
+  */
+  @Schema(name = "prefixBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getPrefixBoolean() {
+    return prefixBoolean;
+  }
+
+  public void setPrefixBoolean(Boolean prefixBoolean) {
+    this.prefixBoolean = prefixBoolean;
+  }
+
+  public XmlItem prefixArray(List<Integer> prefixArray) {
+    this.prefixArray = prefixArray;
+    return this;
+  }
+
+  public XmlItem addPrefixArrayItem(Integer prefixArrayItem) {
+    if (this.prefixArray == null) {
+      this.prefixArray = new ArrayList<Integer>();
+    }
+    this.prefixArray.add(prefixArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixArray
+   * @return prefixArray
+  */
+  @Schema(name = "prefixArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixArray() {
+    return prefixArray;
+  }
+
+  public void setPrefixArray(List<Integer> prefixArray) {
+    this.prefixArray = prefixArray;
+  }
+
+  public XmlItem prefixWrappedArray(List<Integer> prefixWrappedArray) {
+    this.prefixWrappedArray = prefixWrappedArray;
+    return this;
+  }
+
+  public XmlItem addPrefixWrappedArrayItem(Integer prefixWrappedArrayItem) {
+    if (this.prefixWrappedArray == null) {
+      this.prefixWrappedArray = new ArrayList<Integer>();
+    }
+    this.prefixWrappedArray.add(prefixWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixWrappedArray
+   * @return prefixWrappedArray
+  */
+  @Schema(name = "prefixWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixWrappedArray() {
+    return prefixWrappedArray;
+  }
+
+  public void setPrefixWrappedArray(List<Integer> prefixWrappedArray) {
+    this.prefixWrappedArray = prefixWrappedArray;
+  }
+
+  public XmlItem namespaceString(String namespaceString) {
+    this.namespaceString = namespaceString;
+    return this;
+  }
+
+  /**
+   * Get namespaceString
+   * @return namespaceString
+  */
+  @Schema(name = "namespaceString", example = "string", defaultValue = "")
+
+
+  public String getNamespaceString() {
+    return namespaceString;
+  }
+
+  public void setNamespaceString(String namespaceString) {
+    this.namespaceString = namespaceString;
+  }
+
+  public XmlItem namespaceNumber(BigDecimal namespaceNumber) {
+    this.namespaceNumber = namespaceNumber;
+    return this;
+  }
+
+  /**
+   * Get namespaceNumber
+   * @return namespaceNumber
+  */
+  @Schema(name = "namespaceNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getNamespaceNumber() {
+    return namespaceNumber;
+  }
+
+  public void setNamespaceNumber(BigDecimal namespaceNumber) {
+    this.namespaceNumber = namespaceNumber;
+  }
+
+  public XmlItem namespaceInteger(Integer namespaceInteger) {
+    this.namespaceInteger = namespaceInteger;
+    return this;
+  }
+
+  /**
+   * Get namespaceInteger
+   * @return namespaceInteger
+  */
+  @Schema(name = "namespaceInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getNamespaceInteger() {
+    return namespaceInteger;
+  }
+
+  public void setNamespaceInteger(Integer namespaceInteger) {
+    this.namespaceInteger = namespaceInteger;
+  }
+
+  public XmlItem namespaceBoolean(Boolean namespaceBoolean) {
+    this.namespaceBoolean = namespaceBoolean;
+    return this;
+  }
+
+  /**
+   * Get namespaceBoolean
+   * @return namespaceBoolean
+  */
+  @Schema(name = "namespaceBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getNamespaceBoolean() {
+    return namespaceBoolean;
+  }
+
+  public void setNamespaceBoolean(Boolean namespaceBoolean) {
+    this.namespaceBoolean = namespaceBoolean;
+  }
+
+  public XmlItem namespaceArray(List<Integer> namespaceArray) {
+    this.namespaceArray = namespaceArray;
+    return this;
+  }
+
+  public XmlItem addNamespaceArrayItem(Integer namespaceArrayItem) {
+    if (this.namespaceArray == null) {
+      this.namespaceArray = new ArrayList<Integer>();
+    }
+    this.namespaceArray.add(namespaceArrayItem);
+    return this;
+  }
+
+  /**
+   * Get namespaceArray
+   * @return namespaceArray
+  */
+  @Schema(name = "namespaceArray", defaultValue = "")
+
+
+  public List<Integer> getNamespaceArray() {
+    return namespaceArray;
+  }
+
+  public void setNamespaceArray(List<Integer> namespaceArray) {
+    this.namespaceArray = namespaceArray;
+  }
+
+  public XmlItem namespaceWrappedArray(List<Integer> namespaceWrappedArray) {
+    this.namespaceWrappedArray = namespaceWrappedArray;
+    return this;
+  }
+
+  public XmlItem addNamespaceWrappedArrayItem(Integer namespaceWrappedArrayItem) {
+    if (this.namespaceWrappedArray == null) {
+      this.namespaceWrappedArray = new ArrayList<Integer>();
+    }
+    this.namespaceWrappedArray.add(namespaceWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get namespaceWrappedArray
+   * @return namespaceWrappedArray
+  */
+  @Schema(name = "namespaceWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getNamespaceWrappedArray() {
+    return namespaceWrappedArray;
+  }
+
+  public void setNamespaceWrappedArray(List<Integer> namespaceWrappedArray) {
+    this.namespaceWrappedArray = namespaceWrappedArray;
+  }
+
+  public XmlItem prefixNsString(String prefixNsString) {
+    this.prefixNsString = prefixNsString;
+    return this;
+  }
+
+  /**
+   * Get prefixNsString
+   * @return prefixNsString
+  */
+  @Schema(name = "prefixNsString", example = "string", defaultValue = "")
+
+
+  public String getPrefixNsString() {
+    return prefixNsString;
+  }
+
+  public void setPrefixNsString(String prefixNsString) {
+    this.prefixNsString = prefixNsString;
+  }
+
+  public XmlItem prefixNsNumber(BigDecimal prefixNsNumber) {
+    this.prefixNsNumber = prefixNsNumber;
+    return this;
+  }
+
+  /**
+   * Get prefixNsNumber
+   * @return prefixNsNumber
+  */
+  @Schema(name = "prefixNsNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getPrefixNsNumber() {
+    return prefixNsNumber;
+  }
+
+  public void setPrefixNsNumber(BigDecimal prefixNsNumber) {
+    this.prefixNsNumber = prefixNsNumber;
+  }
+
+  public XmlItem prefixNsInteger(Integer prefixNsInteger) {
+    this.prefixNsInteger = prefixNsInteger;
+    return this;
+  }
+
+  /**
+   * Get prefixNsInteger
+   * @return prefixNsInteger
+  */
+  @Schema(name = "prefixNsInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getPrefixNsInteger() {
+    return prefixNsInteger;
+  }
+
+  public void setPrefixNsInteger(Integer prefixNsInteger) {
+    this.prefixNsInteger = prefixNsInteger;
+  }
+
+  public XmlItem prefixNsBoolean(Boolean prefixNsBoolean) {
+    this.prefixNsBoolean = prefixNsBoolean;
+    return this;
+  }
+
+  /**
+   * Get prefixNsBoolean
+   * @return prefixNsBoolean
+  */
+  @Schema(name = "prefixNsBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getPrefixNsBoolean() {
+    return prefixNsBoolean;
+  }
+
+  public void setPrefixNsBoolean(Boolean prefixNsBoolean) {
+    this.prefixNsBoolean = prefixNsBoolean;
+  }
+
+  public XmlItem prefixNsArray(List<Integer> prefixNsArray) {
+    this.prefixNsArray = prefixNsArray;
+    return this;
+  }
+
+  public XmlItem addPrefixNsArrayItem(Integer prefixNsArrayItem) {
+    if (this.prefixNsArray == null) {
+      this.prefixNsArray = new ArrayList<Integer>();
+    }
+    this.prefixNsArray.add(prefixNsArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixNsArray
+   * @return prefixNsArray
+  */
+  @Schema(name = "prefixNsArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixNsArray() {
+    return prefixNsArray;
+  }
+
+  public void setPrefixNsArray(List<Integer> prefixNsArray) {
+    this.prefixNsArray = prefixNsArray;
+  }
+
+  public XmlItem prefixNsWrappedArray(List<Integer> prefixNsWrappedArray) {
+    this.prefixNsWrappedArray = prefixNsWrappedArray;
+    return this;
+  }
+
+  public XmlItem addPrefixNsWrappedArrayItem(Integer prefixNsWrappedArrayItem) {
+    if (this.prefixNsWrappedArray == null) {
+      this.prefixNsWrappedArray = new ArrayList<Integer>();
+    }
+    this.prefixNsWrappedArray.add(prefixNsWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixNsWrappedArray
+   * @return prefixNsWrappedArray
+  */
+  @Schema(name = "prefixNsWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixNsWrappedArray() {
+    return prefixNsWrappedArray;
+  }
+
+  public void setPrefixNsWrappedArray(List<Integer> prefixNsWrappedArray) {
+    this.prefixNsWrappedArray = prefixNsWrappedArray;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    XmlItem xmlItem = (XmlItem) o;
+    return Objects.equals(this.attributeString, xmlItem.attributeString) &&
+        Objects.equals(this.attributeNumber, xmlItem.attributeNumber) &&
+        Objects.equals(this.attributeInteger, xmlItem.attributeInteger) &&
+        Objects.equals(this.attributeBoolean, xmlItem.attributeBoolean) &&
+        Objects.equals(this.wrappedArray, xmlItem.wrappedArray) &&
+        Objects.equals(this.nameString, xmlItem.nameString) &&
+        Objects.equals(this.nameNumber, xmlItem.nameNumber) &&
+        Objects.equals(this.nameInteger, xmlItem.nameInteger) &&
+        Objects.equals(this.nameBoolean, xmlItem.nameBoolean) &&
+        Objects.equals(this.nameArray, xmlItem.nameArray) &&
+        Objects.equals(this.nameWrappedArray, xmlItem.nameWrappedArray) &&
+        Objects.equals(this.prefixString, xmlItem.prefixString) &&
+        Objects.equals(this.prefixNumber, xmlItem.prefixNumber) &&
+        Objects.equals(this.prefixInteger, xmlItem.prefixInteger) &&
+        Objects.equals(this.prefixBoolean, xmlItem.prefixBoolean) &&
+        Objects.equals(this.prefixArray, xmlItem.prefixArray) &&
+        Objects.equals(this.prefixWrappedArray, xmlItem.prefixWrappedArray) &&
+        Objects.equals(this.namespaceString, xmlItem.namespaceString) &&
+        Objects.equals(this.namespaceNumber, xmlItem.namespaceNumber) &&
+        Objects.equals(this.namespaceInteger, xmlItem.namespaceInteger) &&
+        Objects.equals(this.namespaceBoolean, xmlItem.namespaceBoolean) &&
+        Objects.equals(this.namespaceArray, xmlItem.namespaceArray) &&
+        Objects.equals(this.namespaceWrappedArray, xmlItem.namespaceWrappedArray) &&
+        Objects.equals(this.prefixNsString, xmlItem.prefixNsString) &&
+        Objects.equals(this.prefixNsNumber, xmlItem.prefixNsNumber) &&
+        Objects.equals(this.prefixNsInteger, xmlItem.prefixNsInteger) &&
+        Objects.equals(this.prefixNsBoolean, xmlItem.prefixNsBoolean) &&
+        Objects.equals(this.prefixNsArray, xmlItem.prefixNsArray) &&
+        Objects.equals(this.prefixNsWrappedArray, xmlItem.prefixNsWrappedArray);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(attributeString, attributeNumber, attributeInteger, attributeBoolean, wrappedArray, nameString, nameNumber, nameInteger, nameBoolean, nameArray, nameWrappedArray, prefixString, prefixNumber, prefixInteger, prefixBoolean, prefixArray, prefixWrappedArray, namespaceString, namespaceNumber, namespaceInteger, namespaceBoolean, namespaceArray, namespaceWrappedArray, prefixNsString, prefixNsNumber, prefixNsInteger, prefixNsBoolean, prefixNsArray, prefixNsWrappedArray);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class XmlItem {\n");
+    
+    sb.append("    attributeString: ").append(toIndentedString(attributeString)).append("\n");
+    sb.append("    attributeNumber: ").append(toIndentedString(attributeNumber)).append("\n");
+    sb.append("    attributeInteger: ").append(toIndentedString(attributeInteger)).append("\n");
+    sb.append("    attributeBoolean: ").append(toIndentedString(attributeBoolean)).append("\n");
+    sb.append("    wrappedArray: ").append(toIndentedString(wrappedArray)).append("\n");
+    sb.append("    nameString: ").append(toIndentedString(nameString)).append("\n");
+    sb.append("    nameNumber: ").append(toIndentedString(nameNumber)).append("\n");
+    sb.append("    nameInteger: ").append(toIndentedString(nameInteger)).append("\n");
+    sb.append("    nameBoolean: ").append(toIndentedString(nameBoolean)).append("\n");
+    sb.append("    nameArray: ").append(toIndentedString(nameArray)).append("\n");
+    sb.append("    nameWrappedArray: ").append(toIndentedString(nameWrappedArray)).append("\n");
+    sb.append("    prefixString: ").append(toIndentedString(prefixString)).append("\n");
+    sb.append("    prefixNumber: ").append(toIndentedString(prefixNumber)).append("\n");
+    sb.append("    prefixInteger: ").append(toIndentedString(prefixInteger)).append("\n");
+    sb.append("    prefixBoolean: ").append(toIndentedString(prefixBoolean)).append("\n");
+    sb.append("    prefixArray: ").append(toIndentedString(prefixArray)).append("\n");
+    sb.append("    prefixWrappedArray: ").append(toIndentedString(prefixWrappedArray)).append("\n");
+    sb.append("    namespaceString: ").append(toIndentedString(namespaceString)).append("\n");
+    sb.append("    namespaceNumber: ").append(toIndentedString(namespaceNumber)).append("\n");
+    sb.append("    namespaceInteger: ").append(toIndentedString(namespaceInteger)).append("\n");
+    sb.append("    namespaceBoolean: ").append(toIndentedString(namespaceBoolean)).append("\n");
+    sb.append("    namespaceArray: ").append(toIndentedString(namespaceArray)).append("\n");
+    sb.append("    namespaceWrappedArray: ").append(toIndentedString(namespaceWrappedArray)).append("\n");
+    sb.append("    prefixNsString: ").append(toIndentedString(prefixNsString)).append("\n");
+    sb.append("    prefixNsNumber: ").append(toIndentedString(prefixNsNumber)).append("\n");
+    sb.append("    prefixNsInteger: ").append(toIndentedString(prefixNsInteger)).append("\n");
+    sb.append("    prefixNsBoolean: ").append(toIndentedString(prefixNsBoolean)).append("\n");
+    sb.append("    prefixNsArray: ").append(toIndentedString(prefixNsArray)).append("\n");
+    sb.append("    prefixNsWrappedArray: ").append(toIndentedString(prefixNsWrappedArray)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/resources/application.properties b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/resources/application.properties
new file mode 100644
index 0000000000000000000000000000000000000000..9d06609db665e4097670b78b2c2adb4876cfc81f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/resources/application.properties
@@ -0,0 +1,3 @@
+server.port=80
+spring.jackson.date-format=org.openapitools.RFC3339DateFormat
+spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
diff --git a/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/resources/openapi.yaml b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/resources/openapi.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d6386dc39bf4ff458f7db1f6e23a6e1e22b7e8c6
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-beanvalidation-no-nullable/src/main/resources/openapi.yaml
@@ -0,0 +1,2264 @@
+openapi: 3.0.1
+info:
+  description: 'This spec is mainly for testing Petstore server and contains fake
+    endpoints, models. Please do not use this for any other purpose. Special characters:
+    " \'
+  license:
+    name: Apache-2.0
+    url: https://www.apache.org/licenses/LICENSE-2.0.html
+  title: OpenAPI Petstore
+  version: 1.0.0
+servers:
+- url: http://petstore.swagger.io:80/v2
+tags:
+- description: Everything about your Pets
+  name: pet
+- description: Access to Petstore orders
+  name: store
+- description: Operations about user
+  name: user
+paths:
+  /pet:
+    post:
+      operationId: addPet
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Pet'
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/Pet'
+        description: Pet object that needs to be added to the store
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "405":
+          content: {}
+          description: Invalid input
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Add a new pet to the store
+      tags:
+      - pet
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    put:
+      operationId: updatePet
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Pet'
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/Pet'
+        description: Pet object that needs to be added to the store
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Pet not found
+        "405":
+          content: {}
+          description: Validation exception
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Update an existing pet
+      tags:
+      - pet
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/findByStatus:
+    get:
+      description: Multiple status values can be provided with comma separated strings
+      operationId: findPetsByStatus
+      parameters:
+      - description: Status values that need to be considered for filter
+        explode: false
+        in: query
+        name: status
+        required: true
+        schema:
+          items:
+            default: available
+            enum:
+            - available
+            - pending
+            - sold
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid status value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Finds Pets by status
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/findByTags:
+    get:
+      deprecated: true
+      description: Multiple tags can be provided with comma separated strings. Use
+        tag1, tag2, tag3 for testing.
+      operationId: findPetsByTags
+      parameters:
+      - description: Tags to filter by
+        explode: false
+        in: query
+        name: tags
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+          uniqueItems: true
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+                uniqueItems: true
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+                uniqueItems: true
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid tag value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Finds Pets by tags
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/{petId}:
+    delete:
+      operationId: deletePet
+      parameters:
+      - in: header
+        name: api_key
+        schema:
+          type: string
+      - description: Pet id to delete
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid pet value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Deletes a pet
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    get:
+      description: Returns a single pet
+      operationId: getPetById
+      parameters:
+      - description: ID of pet to return
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Pet'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Pet'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Pet not found
+      security:
+      - api_key: []
+      summary: Find pet by ID
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    post:
+      operationId: updatePetWithForm
+      parameters:
+      - description: ID of pet that needs to be updated
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                name:
+                  description: Updated name of the pet
+                  type: string
+                status:
+                  description: Updated status of the pet
+                  type: string
+      responses:
+        "405":
+          content: {}
+          description: Invalid input
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Updates a pet in the store with form data
+      tags:
+      - pet
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/{petId}/uploadImage:
+    post:
+      operationId: uploadFile
+      parameters:
+      - description: ID of pet to update
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                additionalMetadata:
+                  description: Additional data to pass to server
+                  type: string
+                file:
+                  description: file to upload
+                  format: binary
+                  type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiResponse'
+          description: successful operation
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: uploads an image
+      tags:
+      - pet
+      x-contentType: multipart/form-data
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /store/inventory:
+    get:
+      description: Returns a map of status codes to quantities
+      operationId: getInventory
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                additionalProperties:
+                  format: int32
+                  type: integer
+                type: object
+          description: successful operation
+      security:
+      - api_key: []
+      summary: Returns pet inventories by status
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /store/order:
+    post:
+      operationId: placeOrder
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/Order'
+        description: order placed for purchasing the pet
+        required: true
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Order'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Order'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid Order
+      summary: Place an order for a pet
+      tags:
+      - store
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /store/order/{order_id}:
+    delete:
+      description: For valid response try integer IDs with value < 1000. Anything
+        above 1000 or nonintegers will generate API errors
+      operationId: deleteOrder
+      parameters:
+      - description: ID of the order that needs to be deleted
+        in: path
+        name: order_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Order not found
+      summary: Delete purchase order by ID
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+    get:
+      description: For valid response try integer IDs with value <= 5 or > 10. Other
+        values will generated exceptions
+      operationId: getOrderById
+      parameters:
+      - description: ID of pet that needs to be fetched
+        in: path
+        name: order_id
+        required: true
+        schema:
+          format: int64
+          maximum: 5
+          minimum: 1
+          type: integer
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Order'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Order'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Order not found
+      summary: Find purchase order by ID
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /user:
+    post:
+      description: This can only be done by the logged in user.
+      operationId: createUser
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/User'
+        description: Created user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Create user
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/createWithArray:
+    post:
+      operationId: createUsersWithArrayInput
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                $ref: '#/components/schemas/User'
+              type: array
+        description: List of user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Creates list of users with given input array
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/createWithList:
+    post:
+      operationId: createUsersWithListInput
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                $ref: '#/components/schemas/User'
+              type: array
+        description: List of user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Creates list of users with given input array
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/login:
+    get:
+      operationId: loginUser
+      parameters:
+      - description: The user name for login
+        in: query
+        name: username
+        required: true
+        schema:
+          type: string
+      - description: The password for login in clear text
+        in: query
+        name: password
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                type: string
+            application/json:
+              schema:
+                type: string
+          description: successful operation
+          headers:
+            X-Rate-Limit:
+              description: calls per hour allowed by the user
+              schema:
+                format: int32
+                type: integer
+            X-Expires-After:
+              description: date in UTC when token expires
+              schema:
+                format: date-time
+                type: string
+        "400":
+          content: {}
+          description: Invalid username/password supplied
+      summary: Logs user into the system
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/logout:
+    get:
+      operationId: logoutUser
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Logs out current logged in user session
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/{username}:
+    delete:
+      description: This can only be done by the logged in user.
+      operationId: deleteUser
+      parameters:
+      - description: The name that needs to be deleted
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Delete user
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+    get:
+      operationId: getUserByName
+      parameters:
+      - description: The name that needs to be fetched. Use user1 for testing.
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/User'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/User'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Get user by user name
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+    put:
+      description: This can only be done by the logged in user.
+      operationId: updateUser
+      parameters:
+      - description: name that need to be deleted
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/User'
+        description: Updated user object
+        required: true
+      responses:
+        "400":
+          content: {}
+          description: Invalid user supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Updated user
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /fake_classname_test:
+    patch:
+      description: To test class name in snake case
+      operationId: testClassname
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      security:
+      - api_key_query: []
+      summary: To test class name in snake case
+      tags:
+      - fake_classname_tags 123#$%^
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake_classname_tags 123#$%^
+  /fake:
+    delete:
+      description: Fake endpoint to test group parameters (optional)
+      operationId: testGroupParameters
+      parameters:
+      - description: Required String in group parameters
+        in: query
+        name: required_string_group
+        required: true
+        schema:
+          type: integer
+      - description: Required Boolean in group parameters
+        in: header
+        name: required_boolean_group
+        required: true
+        schema:
+          type: boolean
+      - description: Required Integer in group parameters
+        in: query
+        name: required_int64_group
+        required: true
+        schema:
+          format: int64
+          type: integer
+      - description: String in group parameters
+        in: query
+        name: string_group
+        schema:
+          type: integer
+      - description: Boolean in group parameters
+        in: header
+        name: boolean_group
+        schema:
+          type: boolean
+      - description: Integer in group parameters
+        in: query
+        name: int64_group
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "400":
+          content: {}
+          description: Someting wrong
+      summary: Fake endpoint to test group parameters (optional)
+      tags:
+      - fake
+      x-group-parameters: true
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    get:
+      description: To test enum parameters
+      operationId: testEnumParameters
+      parameters:
+      - description: Header parameter enum test (string array)
+        explode: false
+        in: header
+        name: enum_header_string_array
+        schema:
+          items:
+            default: $
+            enum:
+            - '>'
+            - $
+            type: string
+          type: array
+        style: simple
+      - description: Header parameter enum test (string)
+        in: header
+        name: enum_header_string
+        schema:
+          default: -efg
+          enum:
+          - _abc
+          - -efg
+          - (xyz)
+          type: string
+      - description: Query parameter enum test (string array)
+        explode: false
+        in: query
+        name: enum_query_string_array
+        schema:
+          items:
+            default: $
+            enum:
+            - '>'
+            - $
+            type: string
+          type: array
+        style: form
+      - description: Query parameter enum test (string)
+        in: query
+        name: enum_query_string
+        schema:
+          default: -efg
+          enum:
+          - _abc
+          - -efg
+          - (xyz)
+          type: string
+      - description: Query parameter enum test (double)
+        in: query
+        name: enum_query_integer
+        schema:
+          enum:
+          - 1
+          - -2
+          format: int32
+          type: integer
+      - description: Query parameter enum test (double)
+        in: query
+        name: enum_query_double
+        schema:
+          enum:
+          - 1.1
+          - -1.2
+          format: double
+          type: number
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                enum_form_string_array:
+                  description: Form parameter enum test (string array)
+                  items:
+                    default: $
+                    enum:
+                    - '>'
+                    - $
+                    type: string
+                  type: array
+                enum_form_string:
+                  default: -efg
+                  description: Form parameter enum test (string)
+                  enum:
+                  - _abc
+                  - -efg
+                  - (xyz)
+                  type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid request
+        "404":
+          content: {}
+          description: Not found
+      summary: To test enum parameters
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    patch:
+      description: To test "client" model
+      operationId: testClientModel
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      summary: To test "client" model
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    post:
+      description: |-
+        Fake endpoint for testing various parameters
+         假端點
+         偽のエンドポイント
+         가짜 엔드 포인트
+      operationId: testEndpointParameters
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                integer:
+                  description: None
+                  format: int32
+                  maximum: 100
+                  minimum: 10
+                  type: integer
+                int32:
+                  description: None
+                  format: int32
+                  maximum: 200
+                  minimum: 20
+                  type: integer
+                int64:
+                  description: None
+                  format: int64
+                  type: integer
+                number:
+                  description: None
+                  maximum: 543.2
+                  minimum: 32.1
+                  type: number
+                float:
+                  description: None
+                  format: float
+                  maximum: 987.6
+                  type: number
+                double:
+                  description: None
+                  format: double
+                  maximum: 123.4
+                  minimum: 67.8
+                  type: number
+                string:
+                  description: None
+                  pattern: /[a-z]/i
+                  type: string
+                pattern_without_delimiter:
+                  description: None
+                  pattern: ^[A-Z].*
+                  type: string
+                byte:
+                  description: None
+                  format: byte
+                  type: string
+                binary:
+                  description: None
+                  format: binary
+                  type: string
+                date:
+                  description: None
+                  format: date
+                  type: string
+                dateTime:
+                  description: None
+                  format: date-time
+                  type: string
+                password:
+                  description: None
+                  format: password
+                  maxLength: 64
+                  minLength: 10
+                  type: string
+                callback:
+                  description: None
+                  type: string
+              required:
+              - byte
+              - double
+              - number
+              - pattern_without_delimiter
+        required: true
+      responses:
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      security:
+      - http_basic_test: []
+      summary: |-
+        Fake endpoint for testing various parameters
+         假端點
+         偽のエンドポイント
+         가짜 엔드 포인트
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/outer/number:
+    post:
+      description: Test serialization of outer number types
+      operationId: fakeOuterNumberSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterNumber'
+        description: Input number as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterNumber'
+          description: Output number
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/string:
+    post:
+      description: Test serialization of outer string types
+      operationId: fakeOuterStringSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterString'
+        description: Input string as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterString'
+          description: Output string
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/boolean:
+    post:
+      description: Test serialization of outer boolean types
+      operationId: fakeOuterBooleanSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterBoolean'
+        description: Input boolean as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterBoolean'
+          description: Output boolean
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/composite:
+    post:
+      description: Test serialization of object with outer number type
+      operationId: fakeOuterCompositeSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterComposite'
+        description: Input composite as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterComposite'
+          description: Output composite
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/jsonFormData:
+    get:
+      operationId: testJsonFormData
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                param:
+                  description: field1
+                  type: string
+                param2:
+                  description: field2
+                  type: string
+              required:
+              - param
+              - param2
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: test json serialization of form data
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/inline-additionalProperties:
+    post:
+      operationId: testInlineAdditionalProperties
+      requestBody:
+        content:
+          application/json:
+            schema:
+              additionalProperties:
+                type: string
+              type: object
+        description: request body
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: test inline additionalProperties
+      tags:
+      - fake
+      x-codegen-request-body-name: param
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/body-with-query-params:
+    put:
+      operationId: testBodyWithQueryParams
+      parameters:
+      - in: query
+        name: query
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/User'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/create_xml_item:
+    post:
+      description: this route creates an XmlItem
+      operationId: createXmlItem
+      requestBody:
+        content:
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          application/xml; charset=utf-8:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          application/xml; charset=utf-16:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml; charset=utf-8:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml; charset=utf-16:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+        description: XmlItem Body
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: creates an XmlItem
+      tags:
+      - fake
+      x-codegen-request-body-name: XmlItem
+      x-contentType: application/xml
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /another-fake/dummy:
+    patch:
+      description: To test special tags and operation ID starting with number
+      operationId: 123_test_@#$%_special_tags
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      summary: To test special tags
+      tags:
+      - $another-fake?
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: $another-fake?
+  /fake/body-with-file-schema:
+    put:
+      description: For this test, the body for this request much reference a schema
+        named `File`.
+      operationId: testBodyWithFileSchema
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/FileSchemaTestClass'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/test-query-parameters:
+    put:
+      description: To test the collection format in query parameters
+      operationId: testQueryParameterCollectionFormat
+      parameters:
+      - explode: false
+        in: query
+        name: pipe
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - in: query
+        name: ioutil
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+      - in: query
+        name: http
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: spaceDelimited
+      - explode: false
+        in: query
+        name: url
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - explode: true
+        in: query
+        name: context
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/{petId}/uploadImageWithRequiredFile:
+    post:
+      operationId: uploadFileWithRequiredFile
+      parameters:
+      - description: ID of pet to update
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                additionalMetadata:
+                  description: Additional data to pass to server
+                  type: string
+                requiredFile:
+                  description: file to upload
+                  format: binary
+                  type: string
+              required:
+              - requiredFile
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiResponse'
+          description: successful operation
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: uploads an image (required)
+      tags:
+      - pet
+      x-contentType: multipart/form-data
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+components:
+  schemas:
+    Order:
+      example:
+        petId: 6
+        quantity: 1
+        id: 0
+        shipDate: 2000-01-23T04:56:07.000+00:00
+        complete: false
+        status: placed
+      properties:
+        id:
+          format: int64
+          type: integer
+        petId:
+          format: int64
+          type: integer
+        quantity:
+          format: int32
+          type: integer
+        shipDate:
+          format: date-time
+          type: string
+        status:
+          description: Order Status
+          enum:
+          - placed
+          - approved
+          - delivered
+          type: string
+        complete:
+          default: false
+          type: boolean
+      type: object
+      xml:
+        name: Order
+    Category:
+      example:
+        name: default-name
+        id: 6
+      properties:
+        id:
+          format: int64
+          type: integer
+        name:
+          default: default-name
+          type: string
+      required:
+      - name
+      type: object
+      xml:
+        name: Category
+    User:
+      example:
+        firstName: firstName
+        lastName: lastName
+        password: password
+        userStatus: 6
+        phone: phone
+        id: 0
+        email: email
+        username: username
+      properties:
+        id:
+          format: int64
+          type: integer
+          x-is-unique: true
+        username:
+          type: string
+        firstName:
+          type: string
+        lastName:
+          type: string
+        email:
+          type: string
+        password:
+          type: string
+        phone:
+          type: string
+        userStatus:
+          description: User Status
+          format: int32
+          type: integer
+      type: object
+      xml:
+        name: User
+    Tag:
+      example:
+        name: name
+        id: 1
+      properties:
+        id:
+          format: int64
+          type: integer
+        name:
+          type: string
+      type: object
+      xml:
+        name: Tag
+    Pet:
+      example:
+        photoUrls:
+        - photoUrls
+        - photoUrls
+        name: doggie
+        id: 0
+        category:
+          name: default-name
+          id: 6
+        tags:
+        - name: name
+          id: 1
+        - name: name
+          id: 1
+        status: available
+      properties:
+        id:
+          format: int64
+          type: integer
+          x-is-unique: true
+        category:
+          $ref: '#/components/schemas/Category'
+        name:
+          example: doggie
+          type: string
+        photoUrls:
+          items:
+            type: string
+          type: array
+          uniqueItems: true
+          xml:
+            name: photoUrl
+            wrapped: true
+        tags:
+          items:
+            $ref: '#/components/schemas/Tag'
+          type: array
+          xml:
+            name: tag
+            wrapped: true
+        status:
+          description: pet status in the store
+          enum:
+          - available
+          - pending
+          - sold
+          type: string
+      required:
+      - name
+      - photoUrls
+      type: object
+      xml:
+        name: Pet
+    ApiResponse:
+      example:
+        code: 0
+        type: type
+        message: message
+      properties:
+        code:
+          format: int32
+          type: integer
+        type:
+          type: string
+        message:
+          type: string
+      type: object
+    $special[model.name]:
+      properties:
+        $special[property.name]:
+          format: int64
+          type: integer
+      type: object
+      xml:
+        name: $special[model.name]
+    Return:
+      description: Model for testing reserved words
+      properties:
+        return:
+          format: int32
+          type: integer
+      type: object
+      xml:
+        name: Return
+    Name:
+      description: Model for testing model name same as property name
+      properties:
+        name:
+          format: int32
+          type: integer
+        snake_case:
+          format: int32
+          readOnly: true
+          type: integer
+        property:
+          type: string
+        "123Number":
+          readOnly: true
+          type: integer
+      required:
+      - name
+      type: object
+      xml:
+        name: Name
+    "200_response":
+      description: Model for testing model name starting with number
+      properties:
+        name:
+          format: int32
+          type: integer
+        class:
+          type: string
+      type: object
+      xml:
+        name: Name
+    ClassModel:
+      description: Model for testing model with "_class" property
+      properties:
+        _class:
+          type: string
+      type: object
+    Dog:
+      allOf:
+      - $ref: '#/components/schemas/Animal'
+      - $ref: '#/components/schemas/Dog_allOf'
+    Cat:
+      allOf:
+      - $ref: '#/components/schemas/Animal'
+      - $ref: '#/components/schemas/Cat_allOf'
+    BigCat:
+      allOf:
+      - $ref: '#/components/schemas/Cat'
+      - $ref: '#/components/schemas/BigCat_allOf'
+    Animal:
+      discriminator:
+        propertyName: className
+      properties:
+        className:
+          type: string
+        color:
+          default: red
+          type: string
+      required:
+      - className
+      type: object
+    AnimalFarm:
+      items:
+        $ref: '#/components/schemas/Animal'
+      type: array
+    format_test:
+      properties:
+        integer:
+          maximum: 1E+2
+          minimum: 1E+1
+          type: integer
+        int32:
+          format: int32
+          maximum: 2E+2
+          minimum: 2E+1
+          type: integer
+        int64:
+          format: int64
+          type: integer
+        number:
+          maximum: 543.2
+          minimum: 32.1
+          type: number
+        float:
+          format: float
+          maximum: 987.6
+          minimum: 54.3
+          type: number
+        double:
+          format: double
+          maximum: 123.4
+          minimum: 67.8
+          type: number
+        string:
+          pattern: /[a-z]/i
+          type: string
+        byte:
+          format: byte
+          pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
+          type: string
+        binary:
+          format: binary
+          type: string
+        date:
+          format: date
+          type: string
+        dateTime:
+          format: date-time
+          type: string
+        uuid:
+          example: 72f98069-206d-4f12-9f12-3d1e525a8e84
+          format: uuid
+          type: string
+        password:
+          format: password
+          maxLength: 64
+          minLength: 10
+          type: string
+        BigDecimal:
+          format: number
+          type: string
+      required:
+      - byte
+      - date
+      - number
+      - password
+      type: object
+    EnumClass:
+      default: -efg
+      enum:
+      - _abc
+      - -efg
+      - (xyz)
+      type: string
+    Enum_Test:
+      properties:
+        enum_string:
+          enum:
+          - UPPER
+          - lower
+          - ""
+          type: string
+        enum_string_required:
+          enum:
+          - UPPER
+          - lower
+          - ""
+          type: string
+        enum_integer:
+          enum:
+          - 1
+          - -1
+          format: int32
+          type: integer
+        enum_number:
+          enum:
+          - 1.1
+          - -1.2
+          format: double
+          type: number
+        outerEnum:
+          $ref: '#/components/schemas/OuterEnum'
+      required:
+      - enum_string_required
+      type: object
+    AdditionalPropertiesClass:
+      properties:
+        map_string:
+          additionalProperties:
+            type: string
+          type: object
+        map_number:
+          additionalProperties:
+            type: number
+          type: object
+        map_integer:
+          additionalProperties:
+            type: integer
+          type: object
+        map_boolean:
+          additionalProperties:
+            type: boolean
+          type: object
+        map_array_integer:
+          additionalProperties:
+            items:
+              type: integer
+            type: array
+          type: object
+        map_array_anytype:
+          additionalProperties:
+            items:
+              properties: {}
+              type: object
+            type: array
+          type: object
+        map_map_string:
+          additionalProperties:
+            additionalProperties:
+              type: string
+            type: object
+          type: object
+        map_map_anytype:
+          additionalProperties:
+            additionalProperties:
+              properties: {}
+              type: object
+            type: object
+          type: object
+        anytype_1:
+          properties: {}
+          type: object
+        anytype_2:
+          type: object
+        anytype_3:
+          properties: {}
+          type: object
+      type: object
+    AdditionalPropertiesString:
+      additionalProperties:
+        type: string
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesInteger:
+      additionalProperties:
+        type: integer
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesNumber:
+      additionalProperties:
+        type: number
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesBoolean:
+      additionalProperties:
+        type: boolean
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesArray:
+      additionalProperties:
+        items:
+          properties: {}
+          type: object
+        type: array
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesObject:
+      additionalProperties:
+        additionalProperties:
+          properties: {}
+          type: object
+        type: object
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesAnyType:
+      additionalProperties:
+        properties: {}
+        type: object
+      properties:
+        name:
+          type: string
+      type: object
+    MixedPropertiesAndAdditionalPropertiesClass:
+      properties:
+        uuid:
+          format: uuid
+          type: string
+        dateTime:
+          format: date-time
+          type: string
+        map:
+          additionalProperties:
+            $ref: '#/components/schemas/Animal'
+          type: object
+      type: object
+    List:
+      properties:
+        "123-list":
+          type: string
+      type: object
+    Client:
+      example:
+        client: client
+      properties:
+        client:
+          type: string
+      type: object
+    ReadOnlyFirst:
+      properties:
+        bar:
+          readOnly: true
+          type: string
+        baz:
+          type: string
+      type: object
+    hasOnlyReadOnly:
+      properties:
+        bar:
+          readOnly: true
+          type: string
+        foo:
+          readOnly: true
+          type: string
+      type: object
+    Capitalization:
+      properties:
+        smallCamel:
+          type: string
+        CapitalCamel:
+          type: string
+        small_Snake:
+          type: string
+        Capital_Snake:
+          type: string
+        SCA_ETH_Flow_Points:
+          type: string
+        ATT_NAME:
+          description: |
+            Name of the pet
+          type: string
+      type: object
+    MapTest:
+      properties:
+        map_map_of_string:
+          additionalProperties:
+            additionalProperties:
+              type: string
+            type: object
+          type: object
+        map_of_enum_string:
+          additionalProperties:
+            enum:
+            - UPPER
+            - lower
+            type: string
+          type: object
+        direct_map:
+          additionalProperties:
+            type: boolean
+          type: object
+        indirect_map:
+          additionalProperties:
+            type: boolean
+          type: object
+      type: object
+    ArrayTest:
+      properties:
+        array_of_string:
+          items:
+            type: string
+          type: array
+        array_array_of_integer:
+          items:
+            items:
+              format: int64
+              type: integer
+            type: array
+          type: array
+        array_array_of_model:
+          items:
+            items:
+              $ref: '#/components/schemas/ReadOnlyFirst'
+            type: array
+          type: array
+      type: object
+    NumberOnly:
+      properties:
+        JustNumber:
+          type: number
+      type: object
+    ArrayOfNumberOnly:
+      properties:
+        ArrayNumber:
+          items:
+            type: number
+          type: array
+      type: object
+    ArrayOfArrayOfNumberOnly:
+      properties:
+        ArrayArrayNumber:
+          items:
+            items:
+              type: number
+            type: array
+          type: array
+      type: object
+    EnumArrays:
+      properties:
+        just_symbol:
+          enum:
+          - '>='
+          - $
+          type: string
+        array_enum:
+          items:
+            enum:
+            - fish
+            - crab
+            type: string
+          type: array
+      type: object
+    OuterEnum:
+      enum:
+      - placed
+      - approved
+      - delivered
+      type: string
+    OuterComposite:
+      example:
+        my_string: my_string
+        my_number: 0.8008281904610115
+        my_boolean: true
+      properties:
+        my_number:
+          type: number
+        my_string:
+          type: string
+        my_boolean:
+          type: boolean
+          x-codegen-body-parameter-name: boolean_post_body
+      type: object
+    OuterNumber:
+      type: number
+    OuterString:
+      type: string
+    OuterBoolean:
+      type: boolean
+      x-codegen-body-parameter-name: boolean_post_body
+    StringBooleanMap:
+      additionalProperties:
+        type: boolean
+      type: object
+    FileSchemaTestClass:
+      example:
+        file:
+          sourceURI: sourceURI
+        files:
+        - sourceURI: sourceURI
+        - sourceURI: sourceURI
+      properties:
+        file:
+          $ref: '#/components/schemas/File'
+        files:
+          items:
+            $ref: '#/components/schemas/File'
+          type: array
+      type: object
+    File:
+      description: Must be named `File` for test.
+      example:
+        sourceURI: sourceURI
+      properties:
+        sourceURI:
+          description: Test capitalization
+          type: string
+      type: object
+    TypeHolderDefault:
+      properties:
+        string_item:
+          default: what
+          type: string
+        number_item:
+          type: number
+        integer_item:
+          type: integer
+        bool_item:
+          default: true
+          type: boolean
+        array_item:
+          items:
+            type: integer
+          type: array
+      required:
+      - array_item
+      - bool_item
+      - integer_item
+      - number_item
+      - string_item
+      type: object
+    TypeHolderExample:
+      properties:
+        string_item:
+          example: what
+          type: string
+        number_item:
+          example: 1.234
+          type: number
+        float_item:
+          example: 1.234
+          format: float
+          type: number
+        integer_item:
+          example: -2
+          type: integer
+        bool_item:
+          example: true
+          type: boolean
+        array_item:
+          example:
+          - 0
+          - 1
+          - 2
+          - 3
+          items:
+            type: integer
+          type: array
+      required:
+      - array_item
+      - bool_item
+      - float_item
+      - integer_item
+      - number_item
+      - string_item
+      type: object
+    XmlItem:
+      properties:
+        attribute_string:
+          example: string
+          type: string
+          xml:
+            attribute: true
+        attribute_number:
+          example: 1.234
+          type: number
+          xml:
+            attribute: true
+        attribute_integer:
+          example: -2
+          type: integer
+          xml:
+            attribute: true
+        attribute_boolean:
+          example: true
+          type: boolean
+          xml:
+            attribute: true
+        wrapped_array:
+          items:
+            type: integer
+          type: array
+          xml:
+            wrapped: true
+        name_string:
+          example: string
+          type: string
+          xml:
+            name: xml_name_string
+        name_number:
+          example: 1.234
+          type: number
+          xml:
+            name: xml_name_number
+        name_integer:
+          example: -2
+          type: integer
+          xml:
+            name: xml_name_integer
+        name_boolean:
+          example: true
+          type: boolean
+          xml:
+            name: xml_name_boolean
+        name_array:
+          items:
+            type: integer
+            xml:
+              name: xml_name_array_item
+          type: array
+        name_wrapped_array:
+          items:
+            type: integer
+            xml:
+              name: xml_name_wrapped_array_item
+          type: array
+          xml:
+            name: xml_name_wrapped_array
+            wrapped: true
+        prefix_string:
+          example: string
+          type: string
+          xml:
+            prefix: ab
+        prefix_number:
+          example: 1.234
+          type: number
+          xml:
+            prefix: cd
+        prefix_integer:
+          example: -2
+          type: integer
+          xml:
+            prefix: ef
+        prefix_boolean:
+          example: true
+          type: boolean
+          xml:
+            prefix: gh
+        prefix_array:
+          items:
+            type: integer
+            xml:
+              prefix: ij
+          type: array
+        prefix_wrapped_array:
+          items:
+            type: integer
+            xml:
+              prefix: mn
+          type: array
+          xml:
+            prefix: kl
+            wrapped: true
+        namespace_string:
+          example: string
+          type: string
+          xml:
+            namespace: http://a.com/schema
+        namespace_number:
+          example: 1.234
+          type: number
+          xml:
+            namespace: http://b.com/schema
+        namespace_integer:
+          example: -2
+          type: integer
+          xml:
+            namespace: http://c.com/schema
+        namespace_boolean:
+          example: true
+          type: boolean
+          xml:
+            namespace: http://d.com/schema
+        namespace_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://e.com/schema
+          type: array
+        namespace_wrapped_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://g.com/schema
+          type: array
+          xml:
+            namespace: http://f.com/schema
+            wrapped: true
+        prefix_ns_string:
+          example: string
+          type: string
+          xml:
+            namespace: http://a.com/schema
+            prefix: a
+        prefix_ns_number:
+          example: 1.234
+          type: number
+          xml:
+            namespace: http://b.com/schema
+            prefix: b
+        prefix_ns_integer:
+          example: -2
+          type: integer
+          xml:
+            namespace: http://c.com/schema
+            prefix: c
+        prefix_ns_boolean:
+          example: true
+          type: boolean
+          xml:
+            namespace: http://d.com/schema
+            prefix: d
+        prefix_ns_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://e.com/schema
+              prefix: e
+          type: array
+        prefix_ns_wrapped_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://g.com/schema
+              prefix: g
+          type: array
+          xml:
+            namespace: http://f.com/schema
+            prefix: f
+            wrapped: true
+      type: object
+      xml:
+        namespace: http://a.com/schema
+        prefix: pre
+    Dog_allOf:
+      properties:
+        breed:
+          type: string
+      type: object
+    Cat_allOf:
+      properties:
+        declawed:
+          type: boolean
+      type: object
+    BigCat_allOf:
+      properties:
+        kind:
+          enum:
+          - lions
+          - tigers
+          - leopards
+          - jaguars
+          type: string
+      type: object
+  securitySchemes:
+    petstore_auth:
+      flows:
+        implicit:
+          authorizationUrl: http://petstore.swagger.io/api/oauth/dialog
+          scopes:
+            write:pets: modify pets in your account
+            read:pets: read your pets
+      type: oauth2
+    api_key:
+      in: header
+      name: api_key
+      type: apiKey
+    api_key_query:
+      in: query
+      name: api_key_query
+      type: apiKey
+    http_basic_test:
+      scheme: basic
+      type: http
+x-original-swagger-version: "2.0"
diff --git a/samples/openapi3/server/petstore/springboot-delegate/.openapi-generator-ignore b/samples/openapi3/server/petstore/springboot-delegate/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/openapi3/server/petstore/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/openapi3/server/petstore/springboot-delegate/.openapi-generator/FILES b/samples/openapi3/server/petstore/springboot-delegate/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..9df6c44a321395e8ff6f93c1f91d75bf1dc532f9
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/.openapi-generator/FILES
@@ -0,0 +1,72 @@
+README.md
+pom.xml
+src/main/java/org/openapitools/OpenAPI2SpringBoot.java
+src/main/java/org/openapitools/RFC3339DateFormat.java
+src/main/java/org/openapitools/api/AnotherFakeApi.java
+src/main/java/org/openapitools/api/AnotherFakeApiController.java
+src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
+src/main/java/org/openapitools/api/ApiUtil.java
+src/main/java/org/openapitools/api/FakeApi.java
+src/main/java/org/openapitools/api/FakeApiController.java
+src/main/java/org/openapitools/api/FakeApiDelegate.java
+src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
+src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
+src/main/java/org/openapitools/api/PetApi.java
+src/main/java/org/openapitools/api/PetApiController.java
+src/main/java/org/openapitools/api/PetApiDelegate.java
+src/main/java/org/openapitools/api/StoreApi.java
+src/main/java/org/openapitools/api/StoreApiController.java
+src/main/java/org/openapitools/api/StoreApiDelegate.java
+src/main/java/org/openapitools/api/UserApi.java
+src/main/java/org/openapitools/api/UserApiController.java
+src/main/java/org/openapitools/api/UserApiDelegate.java
+src/main/java/org/openapitools/configuration/HomeController.java
+src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
+src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
+src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
+src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
+src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
+src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
+src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
+src/main/java/org/openapitools/model/AdditionalPropertiesString.java
+src/main/java/org/openapitools/model/Animal.java
+src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
+src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
+src/main/java/org/openapitools/model/ArrayTest.java
+src/main/java/org/openapitools/model/BigCat.java
+src/main/java/org/openapitools/model/BigCatAllOf.java
+src/main/java/org/openapitools/model/Capitalization.java
+src/main/java/org/openapitools/model/Cat.java
+src/main/java/org/openapitools/model/CatAllOf.java
+src/main/java/org/openapitools/model/Category.java
+src/main/java/org/openapitools/model/ClassModel.java
+src/main/java/org/openapitools/model/Client.java
+src/main/java/org/openapitools/model/Dog.java
+src/main/java/org/openapitools/model/DogAllOf.java
+src/main/java/org/openapitools/model/EnumArrays.java
+src/main/java/org/openapitools/model/EnumClass.java
+src/main/java/org/openapitools/model/EnumTest.java
+src/main/java/org/openapitools/model/FileSchemaTestClass.java
+src/main/java/org/openapitools/model/FormatTest.java
+src/main/java/org/openapitools/model/HasOnlyReadOnly.java
+src/main/java/org/openapitools/model/MapTest.java
+src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
+src/main/java/org/openapitools/model/Model200Response.java
+src/main/java/org/openapitools/model/ModelApiResponse.java
+src/main/java/org/openapitools/model/ModelReturn.java
+src/main/java/org/openapitools/model/Name.java
+src/main/java/org/openapitools/model/NumberOnly.java
+src/main/java/org/openapitools/model/Order.java
+src/main/java/org/openapitools/model/OuterComposite.java
+src/main/java/org/openapitools/model/OuterEnum.java
+src/main/java/org/openapitools/model/Pet.java
+src/main/java/org/openapitools/model/ReadOnlyFirst.java
+src/main/java/org/openapitools/model/SpecialModelName.java
+src/main/java/org/openapitools/model/Tag.java
+src/main/java/org/openapitools/model/TypeHolderDefault.java
+src/main/java/org/openapitools/model/TypeHolderExample.java
+src/main/java/org/openapitools/model/User.java
+src/main/java/org/openapitools/model/XmlItem.java
+src/main/resources/application.properties
+src/main/resources/openapi.yaml
diff --git a/samples/openapi3/server/petstore/springboot-delegate/.openapi-generator/VERSION b/samples/openapi3/server/petstore/springboot-delegate/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..0984c4c1ad213d3a352049ad557efc9bd5140752
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-delegate/README.md b/samples/openapi3/server/petstore/springboot-delegate/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..befc961488ae17cb2251c0931e29378526fd41ce
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/README.md
@@ -0,0 +1,16 @@
+# OpenAPI generated server
+
+Spring Boot Server
+
+
+## Overview
+This server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
+By using the [OpenAPI-Spec](https://openapis.org), you can easily generate a server stub.
+This is an example of building a OpenAPI-enabled server in Java using the SpringBoot framework.
+
+Start your server as a simple java application
+
+You can view the api documentation in swagger-ui by pointing to
+http://localhost:80/
+
+Change default port value in application.properties
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-delegate/pom.xml b/samples/openapi3/server/petstore/springboot-delegate/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35758ea649647ad4a75188ec8ef853b0ebcc2bc1
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/pom.xml
@@ -0,0 +1,71 @@
+<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.openapi3</groupId>
+    <artifactId>springboot-delegate</artifactId>
+    <packaging>jar</packaging>
+    <name>springboot-delegate</name>
+    <version>1.0.0</version>
+    <properties>
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>2.1.11</swagger-core-version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.5.8</version>
+    </parent>
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>${swagger-core-version}</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.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>0.2.2</version>
+        </dependency>
+        <!-- Bean Validation API support -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/OpenAPI2SpringBoot.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/OpenAPI2SpringBoot.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb088f4519352303a48b18ebbdd5ed9a0003ed73
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/OpenAPI2SpringBoot.java
@@ -0,0 +1,63 @@
+package org.openapitools;
+
+import com.fasterxml.jackson.databind.Module;
+import org.openapitools.jackson.nullable.JsonNullableModule;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.ExitCodeGenerator;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@SpringBootApplication
+@ComponentScan(basePackages = {"org.openapitools", "org.openapitools.api" , "org.openapitools.configuration"})
+public class OpenAPI2SpringBoot implements CommandLineRunner {
+
+    @Override
+    public void run(String... arg0) throws Exception {
+        if (arg0.length > 0 && arg0[0].equals("exitcode")) {
+            throw new ExitException();
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        new SpringApplication(OpenAPI2SpringBoot.class).run(args);
+    }
+
+    static class ExitException extends RuntimeException implements ExitCodeGenerator {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public int getExitCode() {
+            return 10;
+        }
+
+    }
+
+    @Bean
+    public WebMvcConfigurer webConfigurer() {
+        return new WebMvcConfigurer() {
+            /*@Override
+            public void addCorsMappings(CorsRegistry registry) {
+                registry.addMapping("/**")
+                        .allowedOrigins("*")
+                        .allowedMethods("*")
+                        .allowedHeaders("Content-Type");
+            }*/
+
+            @Override
+            public void addResourceHandlers(ResourceHandlerRegistry registry) {
+                registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/3.14.2/");
+            }
+        };
+    }
+
+    @Bean
+    public Module jsonNullableModule() {
+        return new JsonNullableModule();
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/RFC3339DateFormat.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/RFC3339DateFormat.java
new file mode 100644
index 0000000000000000000000000000000000000000..bcd3936d8b343ef7553782b552e9798b69bc5a02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/RFC3339DateFormat.java
@@ -0,0 +1,38 @@
+package org.openapitools;
+
+import com.fasterxml.jackson.databind.util.StdDateFormat;
+
+import java.text.DateFormat;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+public class RFC3339DateFormat extends DateFormat {
+  private static final long serialVersionUID = 1L;
+  private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC");
+
+  private final StdDateFormat fmt = new StdDateFormat()
+          .withTimeZone(TIMEZONE_Z)
+          .withColonInTimeZone(true);
+
+  public RFC3339DateFormat() {
+    this.calendar = new GregorianCalendar();
+  }
+
+  @Override
+  public Date parse(String source, ParsePosition pos) {
+    return fmt.parse(source, pos);
+  }
+
+  @Override
+  public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
+    return fmt.format(date, toAppendTo, fieldPosition);
+  }
+
+  @Override
+  public Object clone() {
+    return this;
+  }
+}
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..b36ef3022ad8942f300acd6d62e109751f39932f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -0,0 +1,61 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "another-fake", description = "the another-fake API")
+public interface AnotherFakeApi {
+
+    default AnotherFakeApiDelegate getDelegate() {
+        return new AnotherFakeApiDelegate() {};
+    }
+
+    /**
+     * PATCH /another-fake/dummy : To test special tags
+     * To test special tags and operation ID starting with number
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test special tags",
+        tags = { "$another-fake?" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/another-fake/dummy",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Client> call123testSpecialTags(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    ) {
+        return getDelegate().call123testSpecialTags(body);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApiController.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..df11134c80677d817f926701dd233d3f306e0529
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApiController.java
@@ -0,0 +1,22 @@
+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.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class AnotherFakeApiController implements AnotherFakeApi {
+
+    private final AnotherFakeApiDelegate delegate;
+
+    public AnotherFakeApiController(@org.springframework.beans.factory.annotation.Autowired(required = false) AnotherFakeApiDelegate delegate) {
+        this.delegate = Optional.ofNullable(delegate).orElse(new AnotherFakeApiDelegate() {});
+    }
+
+    @Override
+    public AnotherFakeApiDelegate getDelegate() {
+        return delegate;
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..a86542ddf2232d5f2c61e67f4ce9647cffd3eb1a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
@@ -0,0 +1,47 @@
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+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.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * A delegate to be called by the {@link AnotherFakeApiController}}.
+ * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class.
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public interface AnotherFakeApiDelegate {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * PATCH /another-fake/dummy : To test special tags
+     * To test special tags and operation ID starting with number
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     * @see AnotherFakeApi#call123testSpecialTags
+     */
+    default ResponseEntity<Client> call123testSpecialTags(Client body) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"client\" : \"client\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/ApiUtil.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/ApiUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..1245b1dd0ccf3cae51824d69fe4074d9acb576df
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/ApiUtil.java
@@ -0,0 +1,19 @@
+package org.openapitools.api;
+
+import org.springframework.web.context.request.NativeWebRequest;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class ApiUtil {
+    public static void setExampleResponse(NativeWebRequest req, String contentType, String example) {
+        try {
+            HttpServletResponse res = req.getNativeResponse(HttpServletResponse.class);
+            res.setCharacterEncoding("UTF-8");
+            res.addHeader("Content-Type", contentType);
+            res.getWriter().print(example);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..a1667f68fd91139c849cbba77784b9c7133d6e58
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java
@@ -0,0 +1,505 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.math.BigDecimal;
+import org.openapitools.model.Client;
+import org.openapitools.model.FileSchemaTestClass;
+import java.time.LocalDate;
+import java.util.Map;
+import org.openapitools.model.ModelApiResponse;
+import java.time.OffsetDateTime;
+import org.openapitools.model.OuterComposite;
+import org.openapitools.model.User;
+import org.openapitools.model.XmlItem;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "fake", description = "the fake API")
+public interface FakeApi {
+
+    default FakeApiDelegate getDelegate() {
+        return new FakeApiDelegate() {};
+    }
+
+    /**
+     * POST /fake/create_xml_item : creates an XmlItem
+     * this route creates an XmlItem
+     *
+     * @param xmlItem XmlItem Body (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "creates an XmlItem",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/create_xml_item",
+        consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
+    )
+    default ResponseEntity<Void> createXmlItem(
+        @Parameter(name = "XmlItem", description = "XmlItem Body", required = true, schema = @Schema(description = "")) @Valid @RequestBody XmlItem xmlItem
+    ) {
+        return getDelegate().createXmlItem(xmlItem);
+    }
+
+
+    /**
+     * POST /fake/outer/boolean
+     * Test serialization of outer boolean types
+     *
+     * @param body Input boolean as post body (optional)
+     * @return Output boolean (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output boolean", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Boolean.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/boolean",
+        produces = { "*/*" }
+    )
+    default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
+        @Parameter(name = "body", description = "Input boolean as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) Boolean body
+    ) {
+        return getDelegate().fakeOuterBooleanSerialize(body);
+    }
+
+
+    /**
+     * POST /fake/outer/composite
+     * Test serialization of object with outer number type
+     *
+     * @param body Input composite as post body (optional)
+     * @return Output composite (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output composite", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  OuterComposite.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/composite",
+        produces = { "*/*" }
+    )
+    default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
+        @Parameter(name = "body", description = "Input composite as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) OuterComposite body
+    ) {
+        return getDelegate().fakeOuterCompositeSerialize(body);
+    }
+
+
+    /**
+     * POST /fake/outer/number
+     * Test serialization of outer number types
+     *
+     * @param body Input number as post body (optional)
+     * @return Output number (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output number", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  BigDecimal.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/number",
+        produces = { "*/*" }
+    )
+    default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
+        @Parameter(name = "body", description = "Input number as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) BigDecimal body
+    ) {
+        return getDelegate().fakeOuterNumberSerialize(body);
+    }
+
+
+    /**
+     * POST /fake/outer/string
+     * Test serialization of outer string types
+     *
+     * @param body Input string as post body (optional)
+     * @return Output string (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output string", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/string",
+        produces = { "*/*" }
+    )
+    default ResponseEntity<String> fakeOuterStringSerialize(
+        @Parameter(name = "body", description = "Input string as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) String body
+    ) {
+        return getDelegate().fakeOuterStringSerialize(body);
+    }
+
+
+    /**
+     * PUT /fake/body-with-file-schema
+     * For this test, the body for this request much reference a schema named &#x60;File&#x60;.
+     *
+     * @param body  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/body-with-file-schema",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> testBodyWithFileSchema(
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody FileSchemaTestClass body
+    ) {
+        return getDelegate().testBodyWithFileSchema(body);
+    }
+
+
+    /**
+     * PUT /fake/body-with-query-params
+     *
+     * @param query  (required)
+     * @param body  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/body-with-query-params",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @Parameter(name = "query", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "query", required = true) String query,
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    ) {
+        return getDelegate().testBodyWithQueryParams(query, body);
+    }
+
+
+    /**
+     * PATCH /fake : To test \&quot;client\&quot; model
+     * To test \&quot;client\&quot; model
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test \"client\" model",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/fake",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Client> testClientModel(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    ) {
+        return getDelegate().testClientModel(body);
+    }
+
+
+    /**
+     * POST /fake : Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     * Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     *
+     * @param number None (required)
+     * @param _double None (required)
+     * @param patternWithoutDelimiter None (required)
+     * @param _byte None (required)
+     * @param integer None (optional)
+     * @param int32 None (optional)
+     * @param int64 None (optional)
+     * @param _float None (optional)
+     * @param string None (optional)
+     * @param binary None (optional)
+     * @param date None (optional)
+     * @param dateTime None (optional)
+     * @param password None (optional)
+     * @param paramCallback None (optional)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        },
+        security = {
+            @SecurityRequirement(name = "http_basic_test")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> testEndpointParameters(
+        @Parameter(name = "number", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @Parameter(name = "double", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @Parameter(name = "pattern_without_delimiter", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @Parameter(name = "byte", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @Parameter(name = "integer", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @Parameter(name = "int32", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @Parameter(name = "int64", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @Parameter(name = "float", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "float", required = false) Float _float,
+        @Parameter(name = "string", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "string", required = false) String string,
+        @Parameter(name = "binary", description = "None", schema = @Schema(description = "")) @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @Parameter(name = "date", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @Parameter(name = "dateTime", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @Parameter(name = "password", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "password", required = false) String password,
+        @Parameter(name = "callback", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
+        return getDelegate().testEndpointParameters(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, string, binary, date, dateTime, password, paramCallback);
+    }
+
+
+    /**
+     * GET /fake : To test enum parameters
+     * To test enum parameters
+     *
+     * @param enumHeaderStringArray Header parameter enum test (string array) (optional)
+     * @param enumHeaderString Header parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryStringArray Query parameter enum test (string array) (optional)
+     * @param enumQueryString Query parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryInteger Query parameter enum test (double) (optional)
+     * @param enumQueryDouble Query parameter enum test (double) (optional)
+     * @param enumFormStringArray Form parameter enum test (string array) (optional, default to $)
+     * @param enumFormString Form parameter enum test (string) (optional, default to -efg)
+     * @return Invalid request (status code 400)
+     *         or Not found (status code 404)
+     */
+    @Operation(
+        summary = "To test enum parameters",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid request"),
+            @ApiResponse(responseCode = "404", description = "Not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/fake",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> testEnumParameters(
+        @Parameter(name = "enum_header_string_array", description = "Header parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @Parameter(name = "enum_header_string", description = "Header parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @Parameter(name = "enum_query_string_array", description = "Query parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @Parameter(name = "enum_query_string", description = "Query parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @Parameter(name = "enum_query_integer", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1", "-2" })) @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @Parameter(name = "enum_query_double", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1.1", "-1.2" })) @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @Parameter(name = "enum_form_string_array", description = "Form parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @Parameter(name = "enum_form_string", description = "Form parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
+        return getDelegate().testEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString);
+    }
+
+
+    /**
+     * DELETE /fake : Fake endpoint to test group parameters (optional)
+     * Fake endpoint to test group parameters (optional)
+     *
+     * @param requiredStringGroup Required String in group parameters (required)
+     * @param requiredBooleanGroup Required Boolean in group parameters (required)
+     * @param requiredInt64Group Required Integer in group parameters (required)
+     * @param stringGroup String in group parameters (optional)
+     * @param booleanGroup Boolean in group parameters (optional)
+     * @param int64Group Integer in group parameters (optional)
+     * @return Someting wrong (status code 400)
+     */
+    @Operation(
+        summary = "Fake endpoint to test group parameters (optional)",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Someting wrong")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/fake"
+    )
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @Parameter(name = "required_string_group", description = "Required String in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @Parameter(name = "required_boolean_group", description = "Required Boolean in group parameters", required = true, schema = @Schema(description = "")) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @Parameter(name = "required_int64_group", description = "Required Integer in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @Parameter(name = "string_group", description = "String in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @Parameter(name = "boolean_group", description = "Boolean in group parameters", schema = @Schema(description = "")) @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @Parameter(name = "int64_group", description = "Integer in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
+        return getDelegate().testGroupParameters(requiredStringGroup, requiredBooleanGroup, requiredInt64Group, stringGroup, booleanGroup, int64Group);
+    }
+
+
+    /**
+     * POST /fake/inline-additionalProperties : test inline additionalProperties
+     *
+     * @param param request body (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "test inline additionalProperties",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/inline-additionalProperties",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> testInlineAdditionalProperties(
+        @Parameter(name = "param", description = "request body", required = true, schema = @Schema(description = "")) @Valid @RequestBody Map<String, String> param
+    ) {
+        return getDelegate().testInlineAdditionalProperties(param);
+    }
+
+
+    /**
+     * GET /fake/jsonFormData : test json serialization of form data
+     *
+     * @param param field1 (required)
+     * @param param2 field2 (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "test json serialization of form data",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/fake/jsonFormData",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> testJsonFormData(
+        @Parameter(name = "param", description = "field1", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "param", required = true) String param,
+        @Parameter(name = "param2", description = "field2", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
+        return getDelegate().testJsonFormData(param, param2);
+    }
+
+
+    /**
+     * PUT /fake/test-query-parameters
+     * To test the collection format in query parameters
+     *
+     * @param pipe  (required)
+     * @param ioutil  (required)
+     * @param http  (required)
+     * @param url  (required)
+     * @param context  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/test-query-parameters"
+    )
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @Parameter(name = "pipe", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @Parameter(name = "ioutil", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @Parameter(name = "http", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @Parameter(name = "url", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @Parameter(name = "context", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
+        return getDelegate().testQueryParameterCollectionFormat(pipe, ioutil, http, url, context);
+    }
+
+
+    /**
+     * POST /fake/{petId}/uploadImageWithRequiredFile : uploads an image (required)
+     *
+     * @param petId ID of pet to update (required)
+     * @param requiredFile file to upload (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image (required)",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/{petId}/uploadImageWithRequiredFile",
+        produces = { "application/json" },
+        consumes = { "multipart/form-data" }
+    )
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "requiredFile", description = "file to upload", required = true, schema = @Schema(description = "")) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
+        return getDelegate().uploadFileWithRequiredFile(petId, requiredFile, additionalMetadata);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApiController.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b22c1aba661d87a247a82444b1169d1b83913e1
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApiController.java
@@ -0,0 +1,22 @@
+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.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class FakeApiController implements FakeApi {
+
+    private final FakeApiDelegate delegate;
+
+    public FakeApiController(@org.springframework.beans.factory.annotation.Autowired(required = false) FakeApiDelegate delegate) {
+        this.delegate = Optional.ofNullable(delegate).orElse(new FakeApiDelegate() {});
+    }
+
+    @Override
+    public FakeApiDelegate getDelegate() {
+        return delegate;
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApiDelegate.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApiDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..d3a949e65d8138b344d886d54f979da9b6ee4652
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApiDelegate.java
@@ -0,0 +1,320 @@
+package org.openapitools.api;
+
+import java.math.BigDecimal;
+import org.openapitools.model.Client;
+import org.openapitools.model.FileSchemaTestClass;
+import java.time.LocalDate;
+import java.util.Map;
+import org.openapitools.model.ModelApiResponse;
+import java.time.OffsetDateTime;
+import org.openapitools.model.OuterComposite;
+import org.openapitools.model.User;
+import org.openapitools.model.XmlItem;
+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.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * A delegate to be called by the {@link FakeApiController}}.
+ * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class.
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public interface FakeApiDelegate {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /fake/create_xml_item : creates an XmlItem
+     * this route creates an XmlItem
+     *
+     * @param xmlItem XmlItem Body (required)
+     * @return successful operation (status code 200)
+     * @see FakeApi#createXmlItem
+     */
+    default ResponseEntity<Void> createXmlItem(XmlItem xmlItem) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake/outer/boolean
+     * Test serialization of outer boolean types
+     *
+     * @param body Input boolean as post body (optional)
+     * @return Output boolean (status code 200)
+     * @see FakeApi#fakeOuterBooleanSerialize
+     */
+    default ResponseEntity<Boolean> fakeOuterBooleanSerialize(Boolean body) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake/outer/composite
+     * Test serialization of object with outer number type
+     *
+     * @param body Input composite as post body (optional)
+     * @return Output composite (status code 200)
+     * @see FakeApi#fakeOuterCompositeSerialize
+     */
+    default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(OuterComposite body) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
+                    String exampleString = "{ \"my_string\" : \"my_string\", \"my_number\" : 0.8008281904610115, \"my_boolean\" : true }";
+                    ApiUtil.setExampleResponse(request, "*/*", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake/outer/number
+     * Test serialization of outer number types
+     *
+     * @param body Input number as post body (optional)
+     * @return Output number (status code 200)
+     * @see FakeApi#fakeOuterNumberSerialize
+     */
+    default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(BigDecimal body) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake/outer/string
+     * Test serialization of outer string types
+     *
+     * @param body Input string as post body (optional)
+     * @return Output string (status code 200)
+     * @see FakeApi#fakeOuterStringSerialize
+     */
+    default ResponseEntity<String> fakeOuterStringSerialize(String body) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * PUT /fake/body-with-file-schema
+     * For this test, the body for this request much reference a schema named &#x60;File&#x60;.
+     *
+     * @param body  (required)
+     * @return Success (status code 200)
+     * @see FakeApi#testBodyWithFileSchema
+     */
+    default ResponseEntity<Void> testBodyWithFileSchema(FileSchemaTestClass body) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * PUT /fake/body-with-query-params
+     *
+     * @param query  (required)
+     * @param body  (required)
+     * @return Success (status code 200)
+     * @see FakeApi#testBodyWithQueryParams
+     */
+    default ResponseEntity<Void> testBodyWithQueryParams(String query,
+        User body) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * PATCH /fake : To test \&quot;client\&quot; model
+     * To test \&quot;client\&quot; model
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     * @see FakeApi#testClientModel
+     */
+    default ResponseEntity<Client> testClientModel(Client body) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"client\" : \"client\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake : Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     * Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     *
+     * @param number None (required)
+     * @param _double None (required)
+     * @param patternWithoutDelimiter None (required)
+     * @param _byte None (required)
+     * @param integer None (optional)
+     * @param int32 None (optional)
+     * @param int64 None (optional)
+     * @param _float None (optional)
+     * @param string None (optional)
+     * @param binary None (optional)
+     * @param date None (optional)
+     * @param dateTime None (optional)
+     * @param password None (optional)
+     * @param paramCallback None (optional)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     * @see FakeApi#testEndpointParameters
+     */
+    default ResponseEntity<Void> testEndpointParameters(BigDecimal number,
+        Double _double,
+        String patternWithoutDelimiter,
+        byte[] _byte,
+        Integer integer,
+        Integer int32,
+        Long int64,
+        Float _float,
+        String string,
+        MultipartFile binary,
+        LocalDate date,
+        OffsetDateTime dateTime,
+        String password,
+        String paramCallback) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /fake : To test enum parameters
+     * To test enum parameters
+     *
+     * @param enumHeaderStringArray Header parameter enum test (string array) (optional)
+     * @param enumHeaderString Header parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryStringArray Query parameter enum test (string array) (optional)
+     * @param enumQueryString Query parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryInteger Query parameter enum test (double) (optional)
+     * @param enumQueryDouble Query parameter enum test (double) (optional)
+     * @param enumFormStringArray Form parameter enum test (string array) (optional, default to $)
+     * @param enumFormString Form parameter enum test (string) (optional, default to -efg)
+     * @return Invalid request (status code 400)
+     *         or Not found (status code 404)
+     * @see FakeApi#testEnumParameters
+     */
+    default ResponseEntity<Void> testEnumParameters(List<String> enumHeaderStringArray,
+        String enumHeaderString,
+        List<String> enumQueryStringArray,
+        String enumQueryString,
+        Integer enumQueryInteger,
+        Double enumQueryDouble,
+        List<String> enumFormStringArray,
+        String enumFormString) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * DELETE /fake : Fake endpoint to test group parameters (optional)
+     * Fake endpoint to test group parameters (optional)
+     *
+     * @param requiredStringGroup Required String in group parameters (required)
+     * @param requiredBooleanGroup Required Boolean in group parameters (required)
+     * @param requiredInt64Group Required Integer in group parameters (required)
+     * @param stringGroup String in group parameters (optional)
+     * @param booleanGroup Boolean in group parameters (optional)
+     * @param int64Group Integer in group parameters (optional)
+     * @return Someting wrong (status code 400)
+     * @see FakeApi#testGroupParameters
+     */
+    default ResponseEntity<Void> testGroupParameters(Integer requiredStringGroup,
+        Boolean requiredBooleanGroup,
+        Long requiredInt64Group,
+        Integer stringGroup,
+        Boolean booleanGroup,
+        Long int64Group) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake/inline-additionalProperties : test inline additionalProperties
+     *
+     * @param param request body (required)
+     * @return successful operation (status code 200)
+     * @see FakeApi#testInlineAdditionalProperties
+     */
+    default ResponseEntity<Void> testInlineAdditionalProperties(Map<String, String> param) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /fake/jsonFormData : test json serialization of form data
+     *
+     * @param param field1 (required)
+     * @param param2 field2 (required)
+     * @return successful operation (status code 200)
+     * @see FakeApi#testJsonFormData
+     */
+    default ResponseEntity<Void> testJsonFormData(String param,
+        String param2) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * PUT /fake/test-query-parameters
+     * To test the collection format in query parameters
+     *
+     * @param pipe  (required)
+     * @param ioutil  (required)
+     * @param http  (required)
+     * @param url  (required)
+     * @param context  (required)
+     * @return Success (status code 200)
+     * @see FakeApi#testQueryParameterCollectionFormat
+     */
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(List<String> pipe,
+        List<String> ioutil,
+        List<String> http,
+        List<String> url,
+        List<String> context) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /fake/{petId}/uploadImageWithRequiredFile : uploads an image (required)
+     *
+     * @param petId ID of pet to update (required)
+     * @param requiredFile file to upload (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @return successful operation (status code 200)
+     * @see FakeApi#uploadFileWithRequiredFile
+     */
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(Long petId,
+        MultipartFile requiredFile,
+        String additionalMetadata) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..52e3ba4f096dd07ce8c82617ec2ca751118f5171
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -0,0 +1,64 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "fake_classname_test", description = "the fake_classname_test API")
+public interface FakeClassnameTestApi {
+
+    default FakeClassnameTestApiDelegate getDelegate() {
+        return new FakeClassnameTestApiDelegate() {};
+    }
+
+    /**
+     * PATCH /fake_classname_test : To test class name in snake case
+     * To test class name in snake case
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test class name in snake case",
+        tags = { "fake_classname_tags 123#$%^" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key_query")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/fake_classname_test",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Client> testClassname(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    ) {
+        return getDelegate().testClassname(body);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..58497641e4c525da4e41dbd5351fd206f512ac50
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
@@ -0,0 +1,22 @@
+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.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class FakeClassnameTestApiController implements FakeClassnameTestApi {
+
+    private final FakeClassnameTestApiDelegate delegate;
+
+    public FakeClassnameTestApiController(@org.springframework.beans.factory.annotation.Autowired(required = false) FakeClassnameTestApiDelegate delegate) {
+        this.delegate = Optional.ofNullable(delegate).orElse(new FakeClassnameTestApiDelegate() {});
+    }
+
+    @Override
+    public FakeClassnameTestApiDelegate getDelegate() {
+        return delegate;
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..ed5a6bfc09a0971e3c638c45fba70d3cffb48ace
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
@@ -0,0 +1,47 @@
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+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.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * A delegate to be called by the {@link FakeClassnameTestApiController}}.
+ * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class.
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public interface FakeClassnameTestApiDelegate {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * PATCH /fake_classname_test : To test class name in snake case
+     * To test class name in snake case
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     * @see FakeClassnameTestApi#testClassname
+     */
+    default ResponseEntity<Client> testClassname(Client body) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"client\" : \"client\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ddf343bfc3a291c60a5f1d717e97ce7799a56b3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java
@@ -0,0 +1,292 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.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 java.util.Set;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "pet", description = "the pet API")
+public interface PetApi {
+
+    default PetApiDelegate getDelegate() {
+        return new PetApiDelegate() {};
+    }
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Add a new pet to the store",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet",
+        consumes = { "application/json", "application/xml" }
+    )
+    default ResponseEntity<Void> addPet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    ) {
+        return getDelegate().addPet(body);
+    }
+
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @param apiKey  (optional)
+     * @return successful operation (status code 200)
+     *         or Invalid pet value (status code 400)
+     */
+    @Operation(
+        summary = "Deletes a pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "400", description = "Invalid pet value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/pet/{petId}"
+    )
+    default ResponseEntity<Void> deletePet(
+        @Parameter(name = "petId", description = "Pet id to delete", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "api_key", description = "", schema = @Schema(description = "")) @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
+        return getDelegate().deletePet(petId, apiKey);
+    }
+
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     */
+    @Operation(
+        summary = "Finds Pets by status",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid status value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByStatus",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<List<Pet>> findPetsByStatus(
+        @NotNull @Parameter(name = "status", description = "Status values that need to be considered for filter", required = true, schema = @Schema(description = "", allowableValues = { "available", "pending", "sold" })) @Valid @RequestParam(value = "status", required = true) List<String> status
+    ) {
+        return getDelegate().findPetsByStatus(status);
+    }
+
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     */
+    @Operation(
+        summary = "Finds Pets by tags",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid tag value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByTags",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @Parameter(name = "tags", description = "Tags to filter by", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
+        return getDelegate().findPetsByTags(tags);
+    }
+
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     */
+    @Operation(
+        summary = "Find pet by ID",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/{petId}",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Pet> getPetById(
+        @Parameter(name = "petId", description = "ID of pet to return", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId
+    ) {
+        return getDelegate().getPetById(petId);
+    }
+
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     */
+    @Operation(
+        summary = "Update an existing pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found"),
+            @ApiResponse(responseCode = "405", description = "Validation exception")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/pet",
+        consumes = { "application/json", "application/xml" }
+    )
+    default ResponseEntity<Void> updatePet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    ) {
+        return getDelegate().updatePet(body);
+    }
+
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Updates a pet in the store with form data",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> updatePetWithForm(
+        @Parameter(name = "petId", description = "ID of pet that needs to be updated", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "name", description = "Updated name of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "name", required = false) String name,
+        @Parameter(name = "status", description = "Updated status of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "status", required = false) String status
+    ) {
+        return getDelegate().updatePetWithForm(petId, name, status);
+    }
+
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}/uploadImage",
+        produces = { "application/json" },
+        consumes = { "multipart/form-data" }
+    )
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @Parameter(name = "file", description = "file to upload", schema = @Schema(description = "")) @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
+        return getDelegate().uploadFile(petId, additionalMetadata, file);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApiController.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fa088c6f10ba19b5525939d6a75c8e12db2e648
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApiController.java
@@ -0,0 +1,22 @@
+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.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class PetApiController implements PetApi {
+
+    private final PetApiDelegate delegate;
+
+    public PetApiController(@org.springframework.beans.factory.annotation.Autowired(required = false) PetApiDelegate delegate) {
+        this.delegate = Optional.ofNullable(delegate).orElse(new PetApiDelegate() {});
+    }
+
+    @Override
+    public PetApiDelegate getDelegate() {
+        return delegate;
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApiDelegate.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApiDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3adc7d4bca7189cdf820a64533a35952a36ae27
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApiDelegate.java
@@ -0,0 +1,197 @@
+package org.openapitools.api;
+
+import org.openapitools.model.ModelApiResponse;
+import org.openapitools.model.Pet;
+import java.util.Set;
+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.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+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.SpringCodegen")
+public interface PetApiDelegate {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid input (status code 405)
+     * @see PetApi#addPet
+     */
+    default ResponseEntity<Void> addPet(Pet body) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @param apiKey  (optional)
+     * @return successful operation (status code 200)
+     *         or Invalid pet value (status code 400)
+     * @see PetApi#deletePet
+     */
+    default ResponseEntity<Void> deletePet(Long petId,
+        String apiKey) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     * @see PetApi#findPetsByStatus
+     */
+    default ResponseEntity<List<Pet>> findPetsByStatus(List<String> status) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     * @see PetApi#findPetsByTags
+     */
+    default ResponseEntity<Set<Pet>> findPetsByTags(Set<String> tags) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     * @see PetApi#getPetById
+     */
+    default ResponseEntity<Pet> getPetById(Long petId) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     * @see PetApi#updatePet
+     */
+    default ResponseEntity<Void> updatePet(Pet body) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     * @see PetApi#updatePetWithForm
+     */
+    default ResponseEntity<Void> updatePetWithForm(Long petId,
+        String name,
+        String status) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     * @see PetApi#uploadFile
+     */
+    default ResponseEntity<ModelApiResponse> uploadFile(Long petId,
+        String additionalMetadata,
+        MultipartFile file) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..de9cf4c59e2a0c296abed76fd823453781f081b8
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java
@@ -0,0 +1,147 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.Map;
+import org.openapitools.model.Order;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "store", description = "the store API")
+public interface StoreApi {
+
+    default StoreApiDelegate getDelegate() {
+        return new StoreApiDelegate() {};
+    }
+
+    /**
+     * DELETE /store/order/{order_id} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/store/order/{order_id}"
+    )
+    default ResponseEntity<Void> deleteOrder(
+        @Parameter(name = "order_id", description = "ID of the order that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("order_id") String orderId
+    ) {
+        return getDelegate().deleteOrder(orderId);
+    }
+
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Returns pet inventories by status",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Map.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/inventory",
+        produces = { "application/json" }
+    )
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
+        return getDelegate().getInventory();
+    }
+
+
+    /**
+     * GET /store/order/{order_id} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Find purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/order/{order_id}",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @Parameter(name = "order_id", description = "ID of pet that needs to be fetched", required = true, schema = @Schema(description = "")) @PathVariable("order_id") Long orderId
+    ) {
+        return getDelegate().getOrderById(orderId);
+    }
+
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param body order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     */
+    @Operation(
+        summary = "Place an order for a pet",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid Order")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/store/order",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Order> placeOrder(
+        @Parameter(name = "body", description = "order placed for purchasing the pet", required = true, schema = @Schema(description = "")) @Valid @RequestBody Order body
+    ) {
+        return getDelegate().placeOrder(body);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApiController.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..9e08c646ae924c379c0560e6f27eeda5f88ccbe7
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApiController.java
@@ -0,0 +1,22 @@
+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.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class StoreApiController implements StoreApi {
+
+    private final StoreApiDelegate delegate;
+
+    public StoreApiController(@org.springframework.beans.factory.annotation.Autowired(required = false) StoreApiDelegate delegate) {
+        this.delegate = Optional.ofNullable(delegate).orElse(new StoreApiDelegate() {});
+    }
+
+    @Override
+    public StoreApiDelegate getDelegate() {
+        return delegate;
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApiDelegate.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApiDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfe4bb314961354e39926b2eea4b6f161abbd3a4
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApiDelegate.java
@@ -0,0 +1,108 @@
+package org.openapitools.api;
+
+import java.util.Map;
+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.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+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.SpringCodegen")
+public interface StoreApiDelegate {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * DELETE /store/order/{order_id} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     * @see StoreApi#deleteOrder
+     */
+    default ResponseEntity<Void> deleteOrder(String orderId) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     * @see StoreApi#getInventory
+     */
+    default ResponseEntity<Map<String, Integer>> getInventory() {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /store/order/{order_id} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     * @see StoreApi#getOrderById
+     */
+    default ResponseEntity<Order> getOrderById(Long orderId) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<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>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param body order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     * @see StoreApi#placeOrder
+     */
+    default ResponseEntity<Order> placeOrder(Order body) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<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>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..e7dd25c6b5db32f22a027a8655ee23e1d6b8c79e
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java
@@ -0,0 +1,246 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.List;
+import java.time.OffsetDateTime;
+import org.openapitools.model.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "user", description = "the user API")
+public interface UserApi {
+
+    default UserApiDelegate getDelegate() {
+        return new UserApiDelegate() {};
+    }
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param body Created user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Create user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user"
+    )
+    default ResponseEntity<Void> createUser(
+        @Parameter(name = "body", description = "Created user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    ) {
+        return getDelegate().createUser(body);
+    }
+
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithArray"
+    )
+    default ResponseEntity<Void> createUsersWithArrayInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    ) {
+        return getDelegate().createUsersWithArrayInput(body);
+    }
+
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithList"
+    )
+    default ResponseEntity<Void> createUsersWithListInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    ) {
+        return getDelegate().createUsersWithListInput(body);
+    }
+
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/user/{username}"
+    )
+    default ResponseEntity<Void> deleteUser(
+        @Parameter(name = "username", description = "The name that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    ) {
+        return getDelegate().deleteUser(username);
+    }
+
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Get user by user name",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  User.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/{username}",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<User> getUserByName(
+        @Parameter(name = "username", description = "The name that needs to be fetched. Use user1 for testing.", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    ) {
+        return getDelegate().getUserByName(username);
+    }
+
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     */
+    @Operation(
+        summary = "Logs user into the system",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username/password supplied")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/login",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<String> loginUser(
+        @NotNull @Parameter(name = "username", description = "The user name for login", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @Parameter(name = "password", description = "The password for login in clear text", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
+        return getDelegate().loginUser(username, password);
+    }
+
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Logs out current logged in user session",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/logout"
+    )
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
+        return getDelegate().logoutUser();
+    }
+
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param body Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Updated user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid user supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/user/{username}"
+    )
+    default ResponseEntity<Void> updateUser(
+        @Parameter(name = "username", description = "name that need to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(name = "body", description = "Updated user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    ) {
+        return getDelegate().updateUser(username, body);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApiController.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..bc2d33598fd9a90f8b68cf033eaafc550c632f09
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApiController.java
@@ -0,0 +1,22 @@
+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.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class UserApiController implements UserApi {
+
+    private final UserApiDelegate delegate;
+
+    public UserApiController(@org.springframework.beans.factory.annotation.Autowired(required = false) UserApiDelegate delegate) {
+        this.delegate = Optional.ofNullable(delegate).orElse(new UserApiDelegate() {});
+    }
+
+    @Override
+    public UserApiDelegate getDelegate() {
+        return delegate;
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApiDelegate.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApiDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..2efbd71c9dc9b723f60cc035861e1b7f35093e7b
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApiDelegate.java
@@ -0,0 +1,148 @@
+package org.openapitools.api;
+
+import java.util.List;
+import java.time.OffsetDateTime;
+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.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+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.SpringCodegen")
+public interface UserApiDelegate {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param body Created user object (required)
+     * @return successful operation (status code 200)
+     * @see UserApi#createUser
+     */
+    default ResponseEntity<Void> createUser(User body) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     * @see UserApi#createUsersWithArrayInput
+     */
+    default ResponseEntity<Void> createUsersWithArrayInput(List<User> body) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     * @see UserApi#createUsersWithListInput
+     */
+    default ResponseEntity<Void> createUsersWithListInput(List<User> body) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     * @see UserApi#deleteUser
+     */
+    default ResponseEntity<Void> deleteUser(String username) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     * @see UserApi#getUserByName
+     */
+    default ResponseEntity<User> getUserByName(String username) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"firstName\" : \"firstName\", \"lastName\" : \"lastName\", \"password\" : \"password\", \"userStatus\" : 6, \"phone\" : \"phone\", \"id\" : 0, \"email\" : \"email\", \"username\" : \"username\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<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>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     * @see UserApi#loginUser
+     */
+    default ResponseEntity<String> loginUser(String username,
+        String password) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     * @see UserApi#logoutUser
+     */
+    default ResponseEntity<Void> logoutUser() {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param body Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     * @see UserApi#updateUser
+     */
+    default ResponseEntity<Void> updateUser(String username,
+        User body) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/configuration/HomeController.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/configuration/HomeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..34bae16b8986820eef90212adb88e86fa2db0ea8
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/configuration/HomeController.java
@@ -0,0 +1,53 @@
+package org.openapitools.configuration;
+
+import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.io.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StreamUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+
+/**
+ * Home redirection to OpenAPI api documentation
+ */
+@Controller
+public class HomeController {
+
+    private static YAMLMapper yamlMapper = new YAMLMapper();
+
+    @Value("classpath:/openapi.yaml")
+    private Resource openapi;
+
+    @Bean
+    public String openapiContent() throws IOException {
+        try(InputStream is = openapi.getInputStream()) {
+            return StreamUtils.copyToString(is, Charset.defaultCharset());
+        }
+    }
+
+    @GetMapping(value = "/openapi.yaml", produces = "application/vnd.oai.openapi")
+    @ResponseBody
+    public String openapiYaml() throws IOException {
+        return openapiContent();
+    }
+
+    @GetMapping(value = "/openapi.json", produces = "application/json")
+    @ResponseBody
+    public Object openapiJson() throws IOException {
+        return yamlMapper.readValue(openapiContent(), Object.class);
+    }
+
+    @RequestMapping("/")
+    public String index() {
+        return "redirect:swagger-ui/index.html?url=../openapi.json";
+    }
+
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c57ae7dd14cea1acd9607d0e392dd2c79257878
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesAnyType
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesAnyType extends HashMap<String, Object>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesAnyType name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesAnyType additionalPropertiesAnyType = (AdditionalPropertiesAnyType) o;
+    return Objects.equals(this.name, additionalPropertiesAnyType.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesAnyType {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5285ec2f29bb31bba95fcaef6e06e815e1101b7
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
@@ -0,0 +1,87 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesArray
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesArray extends HashMap<String, List>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesArray name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesArray additionalPropertiesArray = (AdditionalPropertiesArray) o;
+    return Objects.equals(this.name, additionalPropertiesArray.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesArray {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8ca38c286d5ac22136574721e512776c68b780d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesBoolean
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesBoolean extends HashMap<String, Boolean>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesBoolean name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesBoolean additionalPropertiesBoolean = (AdditionalPropertiesBoolean) o;
+    return Objects.equals(this.name, additionalPropertiesBoolean.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesBoolean {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfd28ccb99637972f69d4653e63a17496210d34b
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
@@ -0,0 +1,414 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesClass   {
+  @JsonProperty("map_string")
+  @Valid
+  private Map<String, String> mapString = null;
+
+  @JsonProperty("map_number")
+  @Valid
+  private Map<String, BigDecimal> mapNumber = null;
+
+  @JsonProperty("map_integer")
+  @Valid
+  private Map<String, Integer> mapInteger = null;
+
+  @JsonProperty("map_boolean")
+  @Valid
+  private Map<String, Boolean> mapBoolean = null;
+
+  @JsonProperty("map_array_integer")
+  @Valid
+  private Map<String, List<Integer>> mapArrayInteger = null;
+
+  @JsonProperty("map_array_anytype")
+  @Valid
+  private Map<String, List<Object>> mapArrayAnytype = null;
+
+  @JsonProperty("map_map_string")
+  @Valid
+  private Map<String, Map<String, String>> mapMapString = null;
+
+  @JsonProperty("map_map_anytype")
+  @Valid
+  private Map<String, Map<String, Object>> mapMapAnytype = null;
+
+  @JsonProperty("anytype_1")
+  private Object anytype1;
+
+  @JsonProperty("anytype_2")
+  private Object anytype2;
+
+  @JsonProperty("anytype_3")
+  private Object anytype3;
+
+  public AdditionalPropertiesClass mapString(Map<String, String> mapString) {
+    this.mapString = mapString;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapStringItem(String key, String mapStringItem) {
+    if (this.mapString == null) {
+      this.mapString = new HashMap<>();
+    }
+    this.mapString.put(key, mapStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapString
+   * @return mapString
+  */
+  @Schema(name = "mapString", defaultValue = "")
+
+
+  public Map<String, String> getMapString() {
+    return mapString;
+  }
+
+  public void setMapString(Map<String, String> mapString) {
+    this.mapString = mapString;
+  }
+
+  public AdditionalPropertiesClass mapNumber(Map<String, BigDecimal> mapNumber) {
+    this.mapNumber = mapNumber;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapNumberItem(String key, BigDecimal mapNumberItem) {
+    if (this.mapNumber == null) {
+      this.mapNumber = new HashMap<>();
+    }
+    this.mapNumber.put(key, mapNumberItem);
+    return this;
+  }
+
+  /**
+   * Get mapNumber
+   * @return mapNumber
+  */
+  @Schema(name = "mapNumber", defaultValue = "")
+
+  @Valid
+
+  public Map<String, BigDecimal> getMapNumber() {
+    return mapNumber;
+  }
+
+  public void setMapNumber(Map<String, BigDecimal> mapNumber) {
+    this.mapNumber = mapNumber;
+  }
+
+  public AdditionalPropertiesClass mapInteger(Map<String, Integer> mapInteger) {
+    this.mapInteger = mapInteger;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapIntegerItem(String key, Integer mapIntegerItem) {
+    if (this.mapInteger == null) {
+      this.mapInteger = new HashMap<>();
+    }
+    this.mapInteger.put(key, mapIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get mapInteger
+   * @return mapInteger
+  */
+  @Schema(name = "mapInteger", defaultValue = "")
+
+
+  public Map<String, Integer> getMapInteger() {
+    return mapInteger;
+  }
+
+  public void setMapInteger(Map<String, Integer> mapInteger) {
+    this.mapInteger = mapInteger;
+  }
+
+  public AdditionalPropertiesClass mapBoolean(Map<String, Boolean> mapBoolean) {
+    this.mapBoolean = mapBoolean;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapBooleanItem(String key, Boolean mapBooleanItem) {
+    if (this.mapBoolean == null) {
+      this.mapBoolean = new HashMap<>();
+    }
+    this.mapBoolean.put(key, mapBooleanItem);
+    return this;
+  }
+
+  /**
+   * Get mapBoolean
+   * @return mapBoolean
+  */
+  @Schema(name = "mapBoolean", defaultValue = "")
+
+
+  public Map<String, Boolean> getMapBoolean() {
+    return mapBoolean;
+  }
+
+  public void setMapBoolean(Map<String, Boolean> mapBoolean) {
+    this.mapBoolean = mapBoolean;
+  }
+
+  public AdditionalPropertiesClass mapArrayInteger(Map<String, List<Integer>> mapArrayInteger) {
+    this.mapArrayInteger = mapArrayInteger;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapArrayIntegerItem(String key, List<Integer> mapArrayIntegerItem) {
+    if (this.mapArrayInteger == null) {
+      this.mapArrayInteger = new HashMap<>();
+    }
+    this.mapArrayInteger.put(key, mapArrayIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get mapArrayInteger
+   * @return mapArrayInteger
+  */
+  @Schema(name = "mapArrayInteger", defaultValue = "")
+
+  @Valid
+
+  public Map<String, List<Integer>> getMapArrayInteger() {
+    return mapArrayInteger;
+  }
+
+  public void setMapArrayInteger(Map<String, List<Integer>> mapArrayInteger) {
+    this.mapArrayInteger = mapArrayInteger;
+  }
+
+  public AdditionalPropertiesClass mapArrayAnytype(Map<String, List<Object>> mapArrayAnytype) {
+    this.mapArrayAnytype = mapArrayAnytype;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapArrayAnytypeItem(String key, List<Object> mapArrayAnytypeItem) {
+    if (this.mapArrayAnytype == null) {
+      this.mapArrayAnytype = new HashMap<>();
+    }
+    this.mapArrayAnytype.put(key, mapArrayAnytypeItem);
+    return this;
+  }
+
+  /**
+   * Get mapArrayAnytype
+   * @return mapArrayAnytype
+  */
+  @Schema(name = "mapArrayAnytype", defaultValue = "")
+
+  @Valid
+
+  public Map<String, List<Object>> getMapArrayAnytype() {
+    return mapArrayAnytype;
+  }
+
+  public void setMapArrayAnytype(Map<String, List<Object>> mapArrayAnytype) {
+    this.mapArrayAnytype = mapArrayAnytype;
+  }
+
+  public AdditionalPropertiesClass mapMapString(Map<String, Map<String, String>> mapMapString) {
+    this.mapMapString = mapMapString;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapMapStringItem(String key, Map<String, String> mapMapStringItem) {
+    if (this.mapMapString == null) {
+      this.mapMapString = new HashMap<>();
+    }
+    this.mapMapString.put(key, mapMapStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapString
+   * @return mapMapString
+  */
+  @Schema(name = "mapMapString", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, String>> getMapMapString() {
+    return mapMapString;
+  }
+
+  public void setMapMapString(Map<String, Map<String, String>> mapMapString) {
+    this.mapMapString = mapMapString;
+  }
+
+  public AdditionalPropertiesClass mapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
+    this.mapMapAnytype = mapMapAnytype;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapMapAnytypeItem(String key, Map<String, Object> mapMapAnytypeItem) {
+    if (this.mapMapAnytype == null) {
+      this.mapMapAnytype = new HashMap<>();
+    }
+    this.mapMapAnytype.put(key, mapMapAnytypeItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapAnytype
+   * @return mapMapAnytype
+  */
+  @Schema(name = "mapMapAnytype", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, Object>> getMapMapAnytype() {
+    return mapMapAnytype;
+  }
+
+  public void setMapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
+    this.mapMapAnytype = mapMapAnytype;
+  }
+
+  public AdditionalPropertiesClass anytype1(Object anytype1) {
+    this.anytype1 = anytype1;
+    return this;
+  }
+
+  /**
+   * Get anytype1
+   * @return anytype1
+  */
+  @Schema(name = "anytype1", defaultValue = "")
+
+
+  public Object getAnytype1() {
+    return anytype1;
+  }
+
+  public void setAnytype1(Object anytype1) {
+    this.anytype1 = anytype1;
+  }
+
+  public AdditionalPropertiesClass anytype2(Object anytype2) {
+    this.anytype2 = anytype2;
+    return this;
+  }
+
+  /**
+   * Get anytype2
+   * @return anytype2
+  */
+  @Schema(name = "anytype2", defaultValue = "")
+
+
+  public Object getAnytype2() {
+    return anytype2;
+  }
+
+  public void setAnytype2(Object anytype2) {
+    this.anytype2 = anytype2;
+  }
+
+  public AdditionalPropertiesClass anytype3(Object anytype3) {
+    this.anytype3 = anytype3;
+    return this;
+  }
+
+  /**
+   * Get anytype3
+   * @return anytype3
+  */
+  @Schema(name = "anytype3", defaultValue = "")
+
+
+  public Object getAnytype3() {
+    return anytype3;
+  }
+
+  public void setAnytype3(Object anytype3) {
+    this.anytype3 = anytype3;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesClass additionalPropertiesClass = (AdditionalPropertiesClass) o;
+    return Objects.equals(this.mapString, additionalPropertiesClass.mapString) &&
+        Objects.equals(this.mapNumber, additionalPropertiesClass.mapNumber) &&
+        Objects.equals(this.mapInteger, additionalPropertiesClass.mapInteger) &&
+        Objects.equals(this.mapBoolean, additionalPropertiesClass.mapBoolean) &&
+        Objects.equals(this.mapArrayInteger, additionalPropertiesClass.mapArrayInteger) &&
+        Objects.equals(this.mapArrayAnytype, additionalPropertiesClass.mapArrayAnytype) &&
+        Objects.equals(this.mapMapString, additionalPropertiesClass.mapMapString) &&
+        Objects.equals(this.mapMapAnytype, additionalPropertiesClass.mapMapAnytype) &&
+        Objects.equals(this.anytype1, additionalPropertiesClass.anytype1) &&
+        Objects.equals(this.anytype2, additionalPropertiesClass.anytype2) &&
+        Objects.equals(this.anytype3, additionalPropertiesClass.anytype3);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(mapString, mapNumber, mapInteger, mapBoolean, mapArrayInteger, mapArrayAnytype, mapMapString, mapMapAnytype, anytype1, anytype2, anytype3);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesClass {\n");
+    
+    sb.append("    mapString: ").append(toIndentedString(mapString)).append("\n");
+    sb.append("    mapNumber: ").append(toIndentedString(mapNumber)).append("\n");
+    sb.append("    mapInteger: ").append(toIndentedString(mapInteger)).append("\n");
+    sb.append("    mapBoolean: ").append(toIndentedString(mapBoolean)).append("\n");
+    sb.append("    mapArrayInteger: ").append(toIndentedString(mapArrayInteger)).append("\n");
+    sb.append("    mapArrayAnytype: ").append(toIndentedString(mapArrayAnytype)).append("\n");
+    sb.append("    mapMapString: ").append(toIndentedString(mapMapString)).append("\n");
+    sb.append("    mapMapAnytype: ").append(toIndentedString(mapMapAnytype)).append("\n");
+    sb.append("    anytype1: ").append(toIndentedString(anytype1)).append("\n");
+    sb.append("    anytype2: ").append(toIndentedString(anytype2)).append("\n");
+    sb.append("    anytype3: ").append(toIndentedString(anytype3)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fea577ab44bc610a5b2f663c9424ca16e773b02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesInteger
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesInteger extends HashMap<String, Integer>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesInteger name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesInteger additionalPropertiesInteger = (AdditionalPropertiesInteger) o;
+    return Objects.equals(this.name, additionalPropertiesInteger.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesInteger {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6eee612a24fecb0da4e4e2cddb8c7d68ef42534
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
@@ -0,0 +1,87 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesNumber
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesNumber extends HashMap<String, BigDecimal>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesNumber name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesNumber additionalPropertiesNumber = (AdditionalPropertiesNumber) o;
+    return Objects.equals(this.name, additionalPropertiesNumber.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesNumber {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7116bd7572cef9114d1110e4f546295b5fb9b25
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesObject
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesObject extends HashMap<String, Map>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesObject name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesObject additionalPropertiesObject = (AdditionalPropertiesObject) o;
+    return Objects.equals(this.name, additionalPropertiesObject.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesObject {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesString.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2022be266fbf1947c18de4430af4faa605595f3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesString
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesString extends HashMap<String, String>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesString name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesString additionalPropertiesString = (AdditionalPropertiesString) o;
+    return Objects.equals(this.name, additionalPropertiesString.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesString {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Animal.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Animal.java
new file mode 100644
index 0000000000000000000000000000000000000000..6f096d5069edf4f60558ff11cd2b2f1902eda228
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Animal.java
@@ -0,0 +1,118 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Animal
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "className", visible = true)
+@JsonSubTypes({
+  @JsonSubTypes.Type(value = BigCat.class, name = "BigCat"),
+  @JsonSubTypes.Type(value = Cat.class, name = "Cat"),
+  @JsonSubTypes.Type(value = Dog.class, name = "Dog"),
+})
+
+public class Animal   {
+  @JsonProperty("className")
+  private String className;
+
+  @JsonProperty("color")
+  private String color = "red";
+
+  public Animal className(String className) {
+    this.className = className;
+    return this;
+  }
+
+  /**
+   * Get className
+   * @return className
+  */
+  @Schema(name = "className", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getClassName() {
+    return className;
+  }
+
+  public void setClassName(String className) {
+    this.className = className;
+  }
+
+  public Animal color(String color) {
+    this.color = color;
+    return this;
+  }
+
+  /**
+   * Get color
+   * @return color
+  */
+  @Schema(name = "color", defaultValue = "")
+
+
+  public String getColor() {
+    return color;
+  }
+
+  public void setColor(String color) {
+    this.color = color;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Animal animal = (Animal) o;
+    return Objects.equals(this.className, animal.className) &&
+        Objects.equals(this.color, animal.color);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(className, color);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Animal {\n");
+    
+    sb.append("    className: ").append(toIndentedString(className)).append("\n");
+    sb.append("    color: ").append(toIndentedString(color)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebe36ad761a9c112d97adf5f724aea0cfd556975
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
@@ -0,0 +1,96 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayOfArrayOfNumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfArrayOfNumberOnly   {
+  @JsonProperty("ArrayArrayNumber")
+  @Valid
+  private List<List<BigDecimal>> arrayArrayNumber = null;
+
+  public ArrayOfArrayOfNumberOnly arrayArrayNumber(List<List<BigDecimal>> arrayArrayNumber) {
+    this.arrayArrayNumber = arrayArrayNumber;
+    return this;
+  }
+
+  public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List<BigDecimal> arrayArrayNumberItem) {
+    if (this.arrayArrayNumber == null) {
+      this.arrayArrayNumber = new ArrayList<>();
+    }
+    this.arrayArrayNumber.add(arrayArrayNumberItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayNumber
+   * @return arrayArrayNumber
+  */
+  @Schema(name = "arrayArrayNumber", defaultValue = "")
+
+  @Valid
+
+  public List<List<BigDecimal>> getArrayArrayNumber() {
+    return arrayArrayNumber;
+  }
+
+  public void setArrayArrayNumber(List<List<BigDecimal>> arrayArrayNumber) {
+    this.arrayArrayNumber = arrayArrayNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayOfArrayOfNumberOnly arrayOfArrayOfNumberOnly = (ArrayOfArrayOfNumberOnly) o;
+    return Objects.equals(this.arrayArrayNumber, arrayOfArrayOfNumberOnly.arrayArrayNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayArrayNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayOfArrayOfNumberOnly {\n");
+    
+    sb.append("    arrayArrayNumber: ").append(toIndentedString(arrayArrayNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..8158dd44ab88aaf69dd18b4c136ff094d8e33b02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
@@ -0,0 +1,96 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayOfNumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfNumberOnly   {
+  @JsonProperty("ArrayNumber")
+  @Valid
+  private List<BigDecimal> arrayNumber = null;
+
+  public ArrayOfNumberOnly arrayNumber(List<BigDecimal> arrayNumber) {
+    this.arrayNumber = arrayNumber;
+    return this;
+  }
+
+  public ArrayOfNumberOnly addArrayNumberItem(BigDecimal arrayNumberItem) {
+    if (this.arrayNumber == null) {
+      this.arrayNumber = new ArrayList<>();
+    }
+    this.arrayNumber.add(arrayNumberItem);
+    return this;
+  }
+
+  /**
+   * Get arrayNumber
+   * @return arrayNumber
+  */
+  @Schema(name = "arrayNumber", defaultValue = "")
+
+  @Valid
+
+  public List<BigDecimal> getArrayNumber() {
+    return arrayNumber;
+  }
+
+  public void setArrayNumber(List<BigDecimal> arrayNumber) {
+    this.arrayNumber = arrayNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayOfNumberOnly arrayOfNumberOnly = (ArrayOfNumberOnly) o;
+    return Objects.equals(this.arrayNumber, arrayOfNumberOnly.arrayNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayOfNumberOnly {\n");
+    
+    sb.append("    arrayNumber: ").append(toIndentedString(arrayNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ArrayTest.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ArrayTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..420010561bcde88cb30eda512eb9fb4ca45779ac
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ArrayTest.java
@@ -0,0 +1,165 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.model.ReadOnlyFirst;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayTest   {
+  @JsonProperty("array_of_string")
+  @Valid
+  private List<String> arrayOfString = null;
+
+  @JsonProperty("array_array_of_integer")
+  @Valid
+  private List<List<Long>> arrayArrayOfInteger = null;
+
+  @JsonProperty("array_array_of_model")
+  @Valid
+  private List<List<ReadOnlyFirst>> arrayArrayOfModel = null;
+
+  public ArrayTest arrayOfString(List<String> arrayOfString) {
+    this.arrayOfString = arrayOfString;
+    return this;
+  }
+
+  public ArrayTest addArrayOfStringItem(String arrayOfStringItem) {
+    if (this.arrayOfString == null) {
+      this.arrayOfString = new ArrayList<>();
+    }
+    this.arrayOfString.add(arrayOfStringItem);
+    return this;
+  }
+
+  /**
+   * Get arrayOfString
+   * @return arrayOfString
+  */
+  @Schema(name = "arrayOfString", defaultValue = "")
+
+
+  public List<String> getArrayOfString() {
+    return arrayOfString;
+  }
+
+  public void setArrayOfString(List<String> arrayOfString) {
+    this.arrayOfString = arrayOfString;
+  }
+
+  public ArrayTest arrayArrayOfInteger(List<List<Long>> arrayArrayOfInteger) {
+    this.arrayArrayOfInteger = arrayArrayOfInteger;
+    return this;
+  }
+
+  public ArrayTest addArrayArrayOfIntegerItem(List<Long> arrayArrayOfIntegerItem) {
+    if (this.arrayArrayOfInteger == null) {
+      this.arrayArrayOfInteger = new ArrayList<>();
+    }
+    this.arrayArrayOfInteger.add(arrayArrayOfIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayOfInteger
+   * @return arrayArrayOfInteger
+  */
+  @Schema(name = "arrayArrayOfInteger", defaultValue = "")
+
+  @Valid
+
+  public List<List<Long>> getArrayArrayOfInteger() {
+    return arrayArrayOfInteger;
+  }
+
+  public void setArrayArrayOfInteger(List<List<Long>> arrayArrayOfInteger) {
+    this.arrayArrayOfInteger = arrayArrayOfInteger;
+  }
+
+  public ArrayTest arrayArrayOfModel(List<List<ReadOnlyFirst>> arrayArrayOfModel) {
+    this.arrayArrayOfModel = arrayArrayOfModel;
+    return this;
+  }
+
+  public ArrayTest addArrayArrayOfModelItem(List<ReadOnlyFirst> arrayArrayOfModelItem) {
+    if (this.arrayArrayOfModel == null) {
+      this.arrayArrayOfModel = new ArrayList<>();
+    }
+    this.arrayArrayOfModel.add(arrayArrayOfModelItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayOfModel
+   * @return arrayArrayOfModel
+  */
+  @Schema(name = "arrayArrayOfModel", defaultValue = "")
+
+  @Valid
+
+  public List<List<ReadOnlyFirst>> getArrayArrayOfModel() {
+    return arrayArrayOfModel;
+  }
+
+  public void setArrayArrayOfModel(List<List<ReadOnlyFirst>> arrayArrayOfModel) {
+    this.arrayArrayOfModel = arrayArrayOfModel;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayTest arrayTest = (ArrayTest) o;
+    return Objects.equals(this.arrayOfString, arrayTest.arrayOfString) &&
+        Objects.equals(this.arrayArrayOfInteger, arrayTest.arrayArrayOfInteger) &&
+        Objects.equals(this.arrayArrayOfModel, arrayTest.arrayArrayOfModel);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayOfString, arrayArrayOfInteger, arrayArrayOfModel);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayTest {\n");
+    
+    sb.append("    arrayOfString: ").append(toIndentedString(arrayOfString)).append("\n");
+    sb.append("    arrayArrayOfInteger: ").append(toIndentedString(arrayArrayOfInteger)).append("\n");
+    sb.append("    arrayArrayOfModel: ").append(toIndentedString(arrayArrayOfModel)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/BigCat.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/BigCat.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f4a080ad8d207649ed357bd5b170142b921935f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/BigCat.java
@@ -0,0 +1,126 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.BigCatAllOf;
+import org.openapitools.model.Cat;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * BigCat
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class BigCat extends Cat  {
+  /**
+   * Gets or Sets kind
+   */
+  public enum KindEnum {
+    LIONS("lions"),
+    
+    TIGERS("tigers"),
+    
+    LEOPARDS("leopards"),
+    
+    JAGUARS("jaguars");
+
+    private String value;
+
+    KindEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static KindEnum fromValue(String value) {
+      for (KindEnum b : KindEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("kind")
+  private KindEnum kind;
+
+  public BigCat kind(KindEnum kind) {
+    this.kind = kind;
+    return this;
+  }
+
+  /**
+   * Get kind
+   * @return kind
+  */
+  @Schema(name = "kind", defaultValue = "")
+
+
+  public KindEnum getKind() {
+    return kind;
+  }
+
+  public void setKind(KindEnum kind) {
+    this.kind = kind;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BigCat bigCat = (BigCat) o;
+    return Objects.equals(this.kind, bigCat.kind) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(kind, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BigCat {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    kind: ").append(toIndentedString(kind)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/BigCatAllOf.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/BigCatAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..d0a47ab5127c66f1da66cb709a5a94d3ddf03bfe
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/BigCatAllOf.java
@@ -0,0 +1,123 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * BigCatAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class BigCatAllOf   {
+  /**
+   * Gets or Sets kind
+   */
+  public enum KindEnum {
+    LIONS("lions"),
+    
+    TIGERS("tigers"),
+    
+    LEOPARDS("leopards"),
+    
+    JAGUARS("jaguars");
+
+    private String value;
+
+    KindEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static KindEnum fromValue(String value) {
+      for (KindEnum b : KindEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("kind")
+  private KindEnum kind;
+
+  public BigCatAllOf kind(KindEnum kind) {
+    this.kind = kind;
+    return this;
+  }
+
+  /**
+   * Get kind
+   * @return kind
+  */
+  @Schema(name = "kind", defaultValue = "")
+
+
+  public KindEnum getKind() {
+    return kind;
+  }
+
+  public void setKind(KindEnum kind) {
+    this.kind = kind;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BigCatAllOf bigCatAllOf = (BigCatAllOf) o;
+    return Objects.equals(this.kind, bigCatAllOf.kind);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(kind);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BigCatAllOf {\n");
+    
+    sb.append("    kind: ").append(toIndentedString(kind)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Capitalization.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Capitalization.java
new file mode 100644
index 0000000000000000000000000000000000000000..92d9a7245f168d96d975f14ce65aac2276c59f73
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Capitalization.java
@@ -0,0 +1,208 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Capitalization
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Capitalization   {
+  @JsonProperty("smallCamel")
+  private String smallCamel;
+
+  @JsonProperty("CapitalCamel")
+  private String capitalCamel;
+
+  @JsonProperty("small_Snake")
+  private String smallSnake;
+
+  @JsonProperty("Capital_Snake")
+  private String capitalSnake;
+
+  @JsonProperty("SCA_ETH_Flow_Points")
+  private String scAETHFlowPoints;
+
+  @JsonProperty("ATT_NAME")
+  private String ATT_NAME;
+
+  public Capitalization smallCamel(String smallCamel) {
+    this.smallCamel = smallCamel;
+    return this;
+  }
+
+  /**
+   * Get smallCamel
+   * @return smallCamel
+  */
+  @Schema(name = "smallCamel", defaultValue = "")
+
+
+  public String getSmallCamel() {
+    return smallCamel;
+  }
+
+  public void setSmallCamel(String smallCamel) {
+    this.smallCamel = smallCamel;
+  }
+
+  public Capitalization capitalCamel(String capitalCamel) {
+    this.capitalCamel = capitalCamel;
+    return this;
+  }
+
+  /**
+   * Get capitalCamel
+   * @return capitalCamel
+  */
+  @Schema(name = "capitalCamel", defaultValue = "")
+
+
+  public String getCapitalCamel() {
+    return capitalCamel;
+  }
+
+  public void setCapitalCamel(String capitalCamel) {
+    this.capitalCamel = capitalCamel;
+  }
+
+  public Capitalization smallSnake(String smallSnake) {
+    this.smallSnake = smallSnake;
+    return this;
+  }
+
+  /**
+   * Get smallSnake
+   * @return smallSnake
+  */
+  @Schema(name = "smallSnake", defaultValue = "")
+
+
+  public String getSmallSnake() {
+    return smallSnake;
+  }
+
+  public void setSmallSnake(String smallSnake) {
+    this.smallSnake = smallSnake;
+  }
+
+  public Capitalization capitalSnake(String capitalSnake) {
+    this.capitalSnake = capitalSnake;
+    return this;
+  }
+
+  /**
+   * Get capitalSnake
+   * @return capitalSnake
+  */
+  @Schema(name = "capitalSnake", defaultValue = "")
+
+
+  public String getCapitalSnake() {
+    return capitalSnake;
+  }
+
+  public void setCapitalSnake(String capitalSnake) {
+    this.capitalSnake = capitalSnake;
+  }
+
+  public Capitalization scAETHFlowPoints(String scAETHFlowPoints) {
+    this.scAETHFlowPoints = scAETHFlowPoints;
+    return this;
+  }
+
+  /**
+   * Get scAETHFlowPoints
+   * @return scAETHFlowPoints
+  */
+  @Schema(name = "scAETHFlowPoints", defaultValue = "")
+
+
+  public String getScAETHFlowPoints() {
+    return scAETHFlowPoints;
+  }
+
+  public void setScAETHFlowPoints(String scAETHFlowPoints) {
+    this.scAETHFlowPoints = scAETHFlowPoints;
+  }
+
+  public Capitalization ATT_NAME(String ATT_NAME) {
+    this.ATT_NAME = ATT_NAME;
+    return this;
+  }
+
+  /**
+   * Name of the pet 
+   * @return ATT_NAME
+  */
+  @Schema(name = "ATT_NAME", defaultValue = "Name of the pet ")
+
+
+  public String getATTNAME() {
+    return ATT_NAME;
+  }
+
+  public void setATTNAME(String ATT_NAME) {
+    this.ATT_NAME = ATT_NAME;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Capitalization capitalization = (Capitalization) o;
+    return Objects.equals(this.smallCamel, capitalization.smallCamel) &&
+        Objects.equals(this.capitalCamel, capitalization.capitalCamel) &&
+        Objects.equals(this.smallSnake, capitalization.smallSnake) &&
+        Objects.equals(this.capitalSnake, capitalization.capitalSnake) &&
+        Objects.equals(this.scAETHFlowPoints, capitalization.scAETHFlowPoints) &&
+        Objects.equals(this.ATT_NAME, capitalization.ATT_NAME);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(smallCamel, capitalCamel, smallSnake, capitalSnake, scAETHFlowPoints, ATT_NAME);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Capitalization {\n");
+    
+    sb.append("    smallCamel: ").append(toIndentedString(smallCamel)).append("\n");
+    sb.append("    capitalCamel: ").append(toIndentedString(capitalCamel)).append("\n");
+    sb.append("    smallSnake: ").append(toIndentedString(smallSnake)).append("\n");
+    sb.append("    capitalSnake: ").append(toIndentedString(capitalSnake)).append("\n");
+    sb.append("    scAETHFlowPoints: ").append(toIndentedString(scAETHFlowPoints)).append("\n");
+    sb.append("    ATT_NAME: ").append(toIndentedString(ATT_NAME)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Cat.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Cat.java
new file mode 100644
index 0000000000000000000000000000000000000000..2e496fb4accd023274cd8876f918d9bc81830216
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Cat.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.model.Animal;
+import org.openapitools.model.CatAllOf;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Cat
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Cat extends Animal  {
+  @JsonProperty("declawed")
+  private Boolean declawed;
+
+  public Cat declawed(Boolean declawed) {
+    this.declawed = declawed;
+    return this;
+  }
+
+  /**
+   * Get declawed
+   * @return declawed
+  */
+  @Schema(name = "declawed", defaultValue = "")
+
+
+  public Boolean getDeclawed() {
+    return declawed;
+  }
+
+  public void setDeclawed(Boolean declawed) {
+    this.declawed = declawed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Cat cat = (Cat) o;
+    return Objects.equals(this.declawed, cat.declawed) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(declawed, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Cat {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    declawed: ").append(toIndentedString(declawed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/CatAllOf.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/CatAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..b732a62b1bc3c125f93944e64bd0e7ddcee8b596
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/CatAllOf.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * CatAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class CatAllOf   {
+  @JsonProperty("declawed")
+  private Boolean declawed;
+
+  public CatAllOf declawed(Boolean declawed) {
+    this.declawed = declawed;
+    return this;
+  }
+
+  /**
+   * Get declawed
+   * @return declawed
+  */
+  @Schema(name = "declawed", defaultValue = "")
+
+
+  public Boolean getDeclawed() {
+    return declawed;
+  }
+
+  public void setDeclawed(Boolean declawed) {
+    this.declawed = declawed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CatAllOf catAllOf = (CatAllOf) o;
+    return Objects.equals(this.declawed, catAllOf.declawed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(declawed);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CatAllOf {\n");
+    
+    sb.append("    declawed: ").append(toIndentedString(declawed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Category.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Category.java
new file mode 100644
index 0000000000000000000000000000000000000000..038fc8df3afd7211ee72d0f74168dbf1423bfb14
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Category.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Category
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Category   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name = "default-name";
+
+  public Category id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Category name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Category category = (Category) o;
+    return Objects.equals(this.id, category.id) &&
+        Objects.equals(this.name, category.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Category {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ClassModel.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ClassModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa2a736f4fb527cad6a7a173117b0a211b4e5923
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ClassModel.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model with \&quot;_class\&quot; property
+ */
+@Schema(name = "ClassModel",description = "Model for testing model with \"_class\" property")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ClassModel   {
+  @JsonProperty("_class")
+  private String propertyClass;
+
+  public ClassModel propertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+    return this;
+  }
+
+  /**
+   * Get propertyClass
+   * @return propertyClass
+  */
+  @Schema(name = "propertyClass", defaultValue = "")
+
+
+  public String getPropertyClass() {
+    return propertyClass;
+  }
+
+  public void setPropertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ClassModel classModel = (ClassModel) o;
+    return Objects.equals(this.propertyClass, classModel.propertyClass);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(propertyClass);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ClassModel {\n");
+    
+    sb.append("    propertyClass: ").append(toIndentedString(propertyClass)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Client.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..e11bd4ff1b13d8e49d80ca56033f92f6b92d4a7f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Client.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Client
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Client   {
+  @JsonProperty("client")
+  private String client;
+
+  public Client client(String client) {
+    this.client = client;
+    return this;
+  }
+
+  /**
+   * Get client
+   * @return client
+  */
+  @Schema(name = "client", defaultValue = "")
+
+
+  public String getClient() {
+    return client;
+  }
+
+  public void setClient(String client) {
+    this.client = client;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Client client = (Client) o;
+    return Objects.equals(this.client, client.client);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(client);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Client {\n");
+    
+    sb.append("    client: ").append(toIndentedString(client)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Dog.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Dog.java
new file mode 100644
index 0000000000000000000000000000000000000000..ed5dc71a4ba24b421e4506efab00505af4d47fad
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Dog.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.model.Animal;
+import org.openapitools.model.DogAllOf;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Dog
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Dog extends Animal  {
+  @JsonProperty("breed")
+  private String breed;
+
+  public Dog breed(String breed) {
+    this.breed = breed;
+    return this;
+  }
+
+  /**
+   * Get breed
+   * @return breed
+  */
+  @Schema(name = "breed", defaultValue = "")
+
+
+  public String getBreed() {
+    return breed;
+  }
+
+  public void setBreed(String breed) {
+    this.breed = breed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Dog dog = (Dog) o;
+    return Objects.equals(this.breed, dog.breed) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(breed, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Dog {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    breed: ").append(toIndentedString(breed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/DogAllOf.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/DogAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c99bc376c3478a650e5f776f10c07b1921f7dd1
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/DogAllOf.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * DogAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class DogAllOf   {
+  @JsonProperty("breed")
+  private String breed;
+
+  public DogAllOf breed(String breed) {
+    this.breed = breed;
+    return this;
+  }
+
+  /**
+   * Get breed
+   * @return breed
+  */
+  @Schema(name = "breed", defaultValue = "")
+
+
+  public String getBreed() {
+    return breed;
+  }
+
+  public void setBreed(String breed) {
+    this.breed = breed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    DogAllOf dogAllOf = (DogAllOf) o;
+    return Objects.equals(this.breed, dogAllOf.breed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(breed);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class DogAllOf {\n");
+    
+    sb.append("    breed: ").append(toIndentedString(breed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/EnumArrays.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/EnumArrays.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1b2df0716a2aa0e29529f3c8b7c884739cb591c
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/EnumArrays.java
@@ -0,0 +1,190 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * EnumArrays
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class EnumArrays   {
+  /**
+   * Gets or Sets justSymbol
+   */
+  public enum JustSymbolEnum {
+    GREATER_THAN_OR_EQUAL_TO(">="),
+    
+    DOLLAR("$");
+
+    private String value;
+
+    JustSymbolEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static JustSymbolEnum fromValue(String value) {
+      for (JustSymbolEnum b : JustSymbolEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("just_symbol")
+  private JustSymbolEnum justSymbol;
+
+  /**
+   * Gets or Sets arrayEnum
+   */
+  public enum ArrayEnumEnum {
+    FISH("fish"),
+    
+    CRAB("crab");
+
+    private String value;
+
+    ArrayEnumEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static ArrayEnumEnum fromValue(String value) {
+      for (ArrayEnumEnum b : ArrayEnumEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("array_enum")
+  @Valid
+  private List<ArrayEnumEnum> arrayEnum = null;
+
+  public EnumArrays justSymbol(JustSymbolEnum justSymbol) {
+    this.justSymbol = justSymbol;
+    return this;
+  }
+
+  /**
+   * Get justSymbol
+   * @return justSymbol
+  */
+  @Schema(name = "justSymbol", defaultValue = "")
+
+
+  public JustSymbolEnum getJustSymbol() {
+    return justSymbol;
+  }
+
+  public void setJustSymbol(JustSymbolEnum justSymbol) {
+    this.justSymbol = justSymbol;
+  }
+
+  public EnumArrays arrayEnum(List<ArrayEnumEnum> arrayEnum) {
+    this.arrayEnum = arrayEnum;
+    return this;
+  }
+
+  public EnumArrays addArrayEnumItem(ArrayEnumEnum arrayEnumItem) {
+    if (this.arrayEnum == null) {
+      this.arrayEnum = new ArrayList<>();
+    }
+    this.arrayEnum.add(arrayEnumItem);
+    return this;
+  }
+
+  /**
+   * Get arrayEnum
+   * @return arrayEnum
+  */
+  @Schema(name = "arrayEnum", defaultValue = "")
+
+
+  public List<ArrayEnumEnum> getArrayEnum() {
+    return arrayEnum;
+  }
+
+  public void setArrayEnum(List<ArrayEnumEnum> arrayEnum) {
+    this.arrayEnum = arrayEnum;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    EnumArrays enumArrays = (EnumArrays) o;
+    return Objects.equals(this.justSymbol, enumArrays.justSymbol) &&
+        Objects.equals(this.arrayEnum, enumArrays.arrayEnum);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(justSymbol, arrayEnum);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class EnumArrays {\n");
+    
+    sb.append("    justSymbol: ").append(toIndentedString(justSymbol)).append("\n");
+    sb.append("    arrayEnum: ").append(toIndentedString(arrayEnum)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/EnumClass.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/EnumClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3d30c1ad453729c1e301ec513b2ad9bb8a3f600
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/EnumClass.java
@@ -0,0 +1,55 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets EnumClass
+ */
+public enum EnumClass {
+  
+  _ABC("_abc"),
+  
+  _EFG("-efg"),
+  
+  _XYZ_("(xyz)");
+
+  private String value;
+
+  EnumClass(String value) {
+    this.value = value;
+  }
+
+  @JsonValue
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(value);
+  }
+
+  @JsonCreator
+  public static EnumClass fromValue(String value) {
+    for (EnumClass b : EnumClass.values()) {
+      if (b.value.equals(value)) {
+        return b;
+      }
+    }
+    throw new IllegalArgumentException("Unexpected value '" + value + "'");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/EnumTest.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/EnumTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..938af53e2b816bd12614e5cfa329b6a5c9737b4a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/EnumTest.java
@@ -0,0 +1,331 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.OuterEnum;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * EnumTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class EnumTest   {
+  /**
+   * Gets or Sets enumString
+   */
+  public enum EnumStringEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower"),
+    
+    EMPTY("");
+
+    private String value;
+
+    EnumStringEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumStringEnum fromValue(String value) {
+      for (EnumStringEnum b : EnumStringEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_string")
+  private EnumStringEnum enumString;
+
+  /**
+   * Gets or Sets enumStringRequired
+   */
+  public enum EnumStringRequiredEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower"),
+    
+    EMPTY("");
+
+    private String value;
+
+    EnumStringRequiredEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumStringRequiredEnum fromValue(String value) {
+      for (EnumStringRequiredEnum b : EnumStringRequiredEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_string_required")
+  private EnumStringRequiredEnum enumStringRequired;
+
+  /**
+   * Gets or Sets enumInteger
+   */
+  public enum EnumIntegerEnum {
+    NUMBER_1(1),
+    
+    NUMBER_MINUS_1(-1);
+
+    private Integer value;
+
+    EnumIntegerEnum(Integer value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public Integer getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumIntegerEnum fromValue(Integer value) {
+      for (EnumIntegerEnum b : EnumIntegerEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_integer")
+  private EnumIntegerEnum enumInteger;
+
+  /**
+   * Gets or Sets enumNumber
+   */
+  public enum EnumNumberEnum {
+    NUMBER_1_DOT_1(1.1),
+    
+    NUMBER_MINUS_1_DOT_2(-1.2);
+
+    private Double value;
+
+    EnumNumberEnum(Double value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public Double getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumNumberEnum fromValue(Double value) {
+      for (EnumNumberEnum b : EnumNumberEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_number")
+  private EnumNumberEnum enumNumber;
+
+  @JsonProperty("outerEnum")
+  private OuterEnum outerEnum;
+
+  public EnumTest enumString(EnumStringEnum enumString) {
+    this.enumString = enumString;
+    return this;
+  }
+
+  /**
+   * Get enumString
+   * @return enumString
+  */
+  @Schema(name = "enumString", defaultValue = "")
+
+
+  public EnumStringEnum getEnumString() {
+    return enumString;
+  }
+
+  public void setEnumString(EnumStringEnum enumString) {
+    this.enumString = enumString;
+  }
+
+  public EnumTest enumStringRequired(EnumStringRequiredEnum enumStringRequired) {
+    this.enumStringRequired = enumStringRequired;
+    return this;
+  }
+
+  /**
+   * Get enumStringRequired
+   * @return enumStringRequired
+  */
+  @Schema(name = "enumStringRequired", required = true, defaultValue = "")
+  @NotNull
+
+
+  public EnumStringRequiredEnum getEnumStringRequired() {
+    return enumStringRequired;
+  }
+
+  public void setEnumStringRequired(EnumStringRequiredEnum enumStringRequired) {
+    this.enumStringRequired = enumStringRequired;
+  }
+
+  public EnumTest enumInteger(EnumIntegerEnum enumInteger) {
+    this.enumInteger = enumInteger;
+    return this;
+  }
+
+  /**
+   * Get enumInteger
+   * @return enumInteger
+  */
+  @Schema(name = "enumInteger", defaultValue = "")
+
+
+  public EnumIntegerEnum getEnumInteger() {
+    return enumInteger;
+  }
+
+  public void setEnumInteger(EnumIntegerEnum enumInteger) {
+    this.enumInteger = enumInteger;
+  }
+
+  public EnumTest enumNumber(EnumNumberEnum enumNumber) {
+    this.enumNumber = enumNumber;
+    return this;
+  }
+
+  /**
+   * Get enumNumber
+   * @return enumNumber
+  */
+  @Schema(name = "enumNumber", defaultValue = "")
+
+
+  public EnumNumberEnum getEnumNumber() {
+    return enumNumber;
+  }
+
+  public void setEnumNumber(EnumNumberEnum enumNumber) {
+    this.enumNumber = enumNumber;
+  }
+
+  public EnumTest outerEnum(OuterEnum outerEnum) {
+    this.outerEnum = outerEnum;
+    return this;
+  }
+
+  /**
+   * Get outerEnum
+   * @return outerEnum
+  */
+  @Schema(name = "outerEnum", defaultValue = "")
+
+  @Valid
+
+  public OuterEnum getOuterEnum() {
+    return outerEnum;
+  }
+
+  public void setOuterEnum(OuterEnum outerEnum) {
+    this.outerEnum = outerEnum;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    EnumTest enumTest = (EnumTest) o;
+    return Objects.equals(this.enumString, enumTest.enumString) &&
+        Objects.equals(this.enumStringRequired, enumTest.enumStringRequired) &&
+        Objects.equals(this.enumInteger, enumTest.enumInteger) &&
+        Objects.equals(this.enumNumber, enumTest.enumNumber) &&
+        Objects.equals(this.outerEnum, enumTest.outerEnum);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(enumString, enumStringRequired, enumInteger, enumNumber, outerEnum);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class EnumTest {\n");
+    
+    sb.append("    enumString: ").append(toIndentedString(enumString)).append("\n");
+    sb.append("    enumStringRequired: ").append(toIndentedString(enumStringRequired)).append("\n");
+    sb.append("    enumInteger: ").append(toIndentedString(enumInteger)).append("\n");
+    sb.append("    enumNumber: ").append(toIndentedString(enumNumber)).append("\n");
+    sb.append("    outerEnum: ").append(toIndentedString(outerEnum)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FileSchemaTestClass.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FileSchemaTestClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d1e9ca8495cde97f9cc2a350fbe63c78738934b
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FileSchemaTestClass.java
@@ -0,0 +1,121 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * FileSchemaTestClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FileSchemaTestClass   {
+  @JsonProperty("file")
+  private java.io.File file;
+
+  @JsonProperty("files")
+  @Valid
+  private List<java.io.File> files = null;
+
+  public FileSchemaTestClass file(java.io.File file) {
+    this.file = file;
+    return this;
+  }
+
+  /**
+   * Get file
+   * @return file
+  */
+  @Schema(name = "file", defaultValue = "")
+
+  @Valid
+
+  public java.io.File getFile() {
+    return file;
+  }
+
+  public void setFile(java.io.File file) {
+    this.file = file;
+  }
+
+  public FileSchemaTestClass files(List<java.io.File> files) {
+    this.files = files;
+    return this;
+  }
+
+  public FileSchemaTestClass addFilesItem(java.io.File filesItem) {
+    if (this.files == null) {
+      this.files = new ArrayList<>();
+    }
+    this.files.add(filesItem);
+    return this;
+  }
+
+  /**
+   * Get files
+   * @return files
+  */
+  @Schema(name = "files", defaultValue = "")
+
+  @Valid
+
+  public List<java.io.File> getFiles() {
+    return files;
+  }
+
+  public void setFiles(List<java.io.File> files) {
+    this.files = files;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    FileSchemaTestClass fileSchemaTestClass = (FileSchemaTestClass) o;
+    return Objects.equals(this.file, fileSchemaTestClass.file) &&
+        Objects.equals(this.files, fileSchemaTestClass.files);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(file, files);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class FileSchemaTestClass {\n");
+    
+    sb.append("    file: ").append(toIndentedString(file)).append("\n");
+    sb.append("    files: ").append(toIndentedString(files)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FormatTest.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FormatTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..6546370cd329ce02e7c034b5e3defbe1db6bde12
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FormatTest.java
@@ -0,0 +1,435 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.util.Arrays;
+import java.util.UUID;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * FormatTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FormatTest   {
+  @JsonProperty("integer")
+  private Integer integer;
+
+  @JsonProperty("int32")
+  private Integer int32;
+
+  @JsonProperty("int64")
+  private Long int64;
+
+  @JsonProperty("number")
+  private BigDecimal number;
+
+  @JsonProperty("float")
+  private Float _float;
+
+  @JsonProperty("double")
+  private Double _double;
+
+  @JsonProperty("string")
+  private String string;
+
+  @JsonProperty("byte")
+  private byte[] _byte;
+
+  @JsonProperty("binary")
+  private org.springframework.core.io.Resource binary;
+
+  @JsonProperty("date")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE)
+  private LocalDate date;
+
+  @JsonProperty("dateTime")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime dateTime;
+
+  @JsonProperty("uuid")
+  private UUID uuid;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("BigDecimal")
+  private BigDecimal bigDecimal;
+
+  public FormatTest integer(Integer integer) {
+    this.integer = integer;
+    return this;
+  }
+
+  /**
+   * Get integer
+   * minimum: 10
+   * maximum: 100
+   * @return integer
+  */
+  @Schema(name = "integer", defaultValue = "")
+
+@Min(10) @Max(100) 
+  public Integer getInteger() {
+    return integer;
+  }
+
+  public void setInteger(Integer integer) {
+    this.integer = integer;
+  }
+
+  public FormatTest int32(Integer int32) {
+    this.int32 = int32;
+    return this;
+  }
+
+  /**
+   * Get int32
+   * minimum: 20
+   * maximum: 200
+   * @return int32
+  */
+  @Schema(name = "int32", defaultValue = "")
+
+@Min(20) @Max(200) 
+  public Integer getInt32() {
+    return int32;
+  }
+
+  public void setInt32(Integer int32) {
+    this.int32 = int32;
+  }
+
+  public FormatTest int64(Long int64) {
+    this.int64 = int64;
+    return this;
+  }
+
+  /**
+   * Get int64
+   * @return int64
+  */
+  @Schema(name = "int64", defaultValue = "")
+
+
+  public Long getInt64() {
+    return int64;
+  }
+
+  public void setInt64(Long int64) {
+    this.int64 = int64;
+  }
+
+  public FormatTest number(BigDecimal number) {
+    this.number = number;
+    return this;
+  }
+
+  /**
+   * Get number
+   * minimum: 32.1
+   * maximum: 543.2
+   * @return number
+  */
+  @Schema(name = "number", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+@DecimalMin("32.1") @DecimalMax("543.2") 
+  public BigDecimal getNumber() {
+    return number;
+  }
+
+  public void setNumber(BigDecimal number) {
+    this.number = number;
+  }
+
+  public FormatTest _float(Float _float) {
+    this._float = _float;
+    return this;
+  }
+
+  /**
+   * Get _float
+   * minimum: 54.3
+   * maximum: 987.6
+   * @return _float
+  */
+  @Schema(name = "_float", defaultValue = "")
+
+@DecimalMin("54.3") @DecimalMax("987.6") 
+  public Float getFloat() {
+    return _float;
+  }
+
+  public void setFloat(Float _float) {
+    this._float = _float;
+  }
+
+  public FormatTest _double(Double _double) {
+    this._double = _double;
+    return this;
+  }
+
+  /**
+   * Get _double
+   * minimum: 67.8
+   * maximum: 123.4
+   * @return _double
+  */
+  @Schema(name = "_double", defaultValue = "")
+
+@DecimalMin("67.8") @DecimalMax("123.4") 
+  public Double getDouble() {
+    return _double;
+  }
+
+  public void setDouble(Double _double) {
+    this._double = _double;
+  }
+
+  public FormatTest string(String string) {
+    this.string = string;
+    return this;
+  }
+
+  /**
+   * Get string
+   * @return string
+  */
+  @Schema(name = "string", defaultValue = "")
+
+@Pattern(regexp = "/[a-z]/i") 
+  public String getString() {
+    return string;
+  }
+
+  public void setString(String string) {
+    this.string = string;
+  }
+
+  public FormatTest _byte(byte[] _byte) {
+    this._byte = _byte;
+    return this;
+  }
+
+  /**
+   * Get _byte
+   * @return _byte
+  */
+  @Schema(name = "_byte", required = true, defaultValue = "")
+  @NotNull
+
+
+  public byte[] getByte() {
+    return _byte;
+  }
+
+  public void setByte(byte[] _byte) {
+    this._byte = _byte;
+  }
+
+  public FormatTest binary(org.springframework.core.io.Resource binary) {
+    this.binary = binary;
+    return this;
+  }
+
+  /**
+   * Get binary
+   * @return binary
+  */
+  @Schema(name = "binary", defaultValue = "")
+
+  @Valid
+
+  public org.springframework.core.io.Resource getBinary() {
+    return binary;
+  }
+
+  public void setBinary(org.springframework.core.io.Resource binary) {
+    this.binary = binary;
+  }
+
+  public FormatTest date(LocalDate date) {
+    this.date = date;
+    return this;
+  }
+
+  /**
+   * Get date
+   * @return date
+  */
+  @Schema(name = "date", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public LocalDate getDate() {
+    return date;
+  }
+
+  public void setDate(LocalDate date) {
+    this.date = date;
+  }
+
+  public FormatTest dateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+    return this;
+  }
+
+  /**
+   * Get dateTime
+   * @return dateTime
+  */
+  @Schema(name = "dateTime", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getDateTime() {
+    return dateTime;
+  }
+
+  public void setDateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+  }
+
+  public FormatTest uuid(UUID uuid) {
+    this.uuid = uuid;
+    return this;
+  }
+
+  /**
+   * Get uuid
+   * @return uuid
+  */
+  @Schema(name = "uuid", example = "72f98069-206d-4f12-9f12-3d1e525a8e84", defaultValue = "")
+
+  @Valid
+
+  public UUID getUuid() {
+    return uuid;
+  }
+
+  public void setUuid(UUID uuid) {
+    this.uuid = uuid;
+  }
+
+  public FormatTest password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", required = true, defaultValue = "")
+  @NotNull
+
+@Size(min = 10, max = 64) 
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public FormatTest bigDecimal(BigDecimal bigDecimal) {
+    this.bigDecimal = bigDecimal;
+    return this;
+  }
+
+  /**
+   * Get bigDecimal
+   * @return bigDecimal
+  */
+  @Schema(name = "bigDecimal", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getBigDecimal() {
+    return bigDecimal;
+  }
+
+  public void setBigDecimal(BigDecimal bigDecimal) {
+    this.bigDecimal = bigDecimal;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    FormatTest formatTest = (FormatTest) o;
+    return Objects.equals(this.integer, formatTest.integer) &&
+        Objects.equals(this.int32, formatTest.int32) &&
+        Objects.equals(this.int64, formatTest.int64) &&
+        Objects.equals(this.number, formatTest.number) &&
+        Objects.equals(this._float, formatTest._float) &&
+        Objects.equals(this._double, formatTest._double) &&
+        Objects.equals(this.string, formatTest.string) &&
+        Arrays.equals(this._byte, formatTest._byte) &&
+        Objects.equals(this.binary, formatTest.binary) &&
+        Objects.equals(this.date, formatTest.date) &&
+        Objects.equals(this.dateTime, formatTest.dateTime) &&
+        Objects.equals(this.uuid, formatTest.uuid) &&
+        Objects.equals(this.password, formatTest.password) &&
+        Objects.equals(this.bigDecimal, formatTest.bigDecimal);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(integer, int32, int64, number, _float, _double, string, Arrays.hashCode(_byte), binary, date, dateTime, uuid, password, bigDecimal);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class FormatTest {\n");
+    
+    sb.append("    integer: ").append(toIndentedString(integer)).append("\n");
+    sb.append("    int32: ").append(toIndentedString(int32)).append("\n");
+    sb.append("    int64: ").append(toIndentedString(int64)).append("\n");
+    sb.append("    number: ").append(toIndentedString(number)).append("\n");
+    sb.append("    _float: ").append(toIndentedString(_float)).append("\n");
+    sb.append("    _double: ").append(toIndentedString(_double)).append("\n");
+    sb.append("    string: ").append(toIndentedString(string)).append("\n");
+    sb.append("    _byte: ").append(toIndentedString(_byte)).append("\n");
+    sb.append("    binary: ").append(toIndentedString(binary)).append("\n");
+    sb.append("    date: ").append(toIndentedString(date)).append("\n");
+    sb.append("    dateTime: ").append(toIndentedString(dateTime)).append("\n");
+    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    bigDecimal: ").append(toIndentedString(bigDecimal)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfb615a529fcf851112e0d03ebdda2b88636dd2e
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * HasOnlyReadOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class HasOnlyReadOnly   {
+  @JsonProperty("bar")
+  private String bar;
+
+  @JsonProperty("foo")
+  private String foo;
+
+  public HasOnlyReadOnly bar(String bar) {
+    this.bar = bar;
+    return this;
+  }
+
+  /**
+   * Get bar
+   * @return bar
+  */
+  @Schema(name = "bar", readOnly = true, defaultValue = "")
+
+
+  public String getBar() {
+    return bar;
+  }
+
+  public void setBar(String bar) {
+    this.bar = bar;
+  }
+
+  public HasOnlyReadOnly foo(String foo) {
+    this.foo = foo;
+    return this;
+  }
+
+  /**
+   * Get foo
+   * @return foo
+  */
+  @Schema(name = "foo", readOnly = true, defaultValue = "")
+
+
+  public String getFoo() {
+    return foo;
+  }
+
+  public void setFoo(String foo) {
+    this.foo = foo;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    HasOnlyReadOnly hasOnlyReadOnly = (HasOnlyReadOnly) o;
+    return Objects.equals(this.bar, hasOnlyReadOnly.bar) &&
+        Objects.equals(this.foo, hasOnlyReadOnly.foo);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(bar, foo);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class HasOnlyReadOnly {\n");
+    
+    sb.append("    bar: ").append(toIndentedString(bar)).append("\n");
+    sb.append("    foo: ").append(toIndentedString(foo)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/MapTest.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/MapTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ff73062758f04ef937017393c488750cc744270
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/MapTest.java
@@ -0,0 +1,234 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * MapTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MapTest   {
+  @JsonProperty("map_map_of_string")
+  @Valid
+  private Map<String, Map<String, String>> mapMapOfString = null;
+
+  /**
+   * Gets or Sets inner
+   */
+  public enum InnerEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower");
+
+    private String value;
+
+    InnerEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static InnerEnum fromValue(String value) {
+      for (InnerEnum b : InnerEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("map_of_enum_string")
+  @Valid
+  private Map<String, InnerEnum> mapOfEnumString = null;
+
+  @JsonProperty("direct_map")
+  @Valid
+  private Map<String, Boolean> directMap = null;
+
+  @JsonProperty("indirect_map")
+  @Valid
+  private Map<String, Boolean> indirectMap = null;
+
+  public MapTest mapMapOfString(Map<String, Map<String, String>> mapMapOfString) {
+    this.mapMapOfString = mapMapOfString;
+    return this;
+  }
+
+  public MapTest putMapMapOfStringItem(String key, Map<String, String> mapMapOfStringItem) {
+    if (this.mapMapOfString == null) {
+      this.mapMapOfString = new HashMap<>();
+    }
+    this.mapMapOfString.put(key, mapMapOfStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapOfString
+   * @return mapMapOfString
+  */
+  @Schema(name = "mapMapOfString", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, String>> getMapMapOfString() {
+    return mapMapOfString;
+  }
+
+  public void setMapMapOfString(Map<String, Map<String, String>> mapMapOfString) {
+    this.mapMapOfString = mapMapOfString;
+  }
+
+  public MapTest mapOfEnumString(Map<String, InnerEnum> mapOfEnumString) {
+    this.mapOfEnumString = mapOfEnumString;
+    return this;
+  }
+
+  public MapTest putMapOfEnumStringItem(String key, InnerEnum mapOfEnumStringItem) {
+    if (this.mapOfEnumString == null) {
+      this.mapOfEnumString = new HashMap<>();
+    }
+    this.mapOfEnumString.put(key, mapOfEnumStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapOfEnumString
+   * @return mapOfEnumString
+  */
+  @Schema(name = "mapOfEnumString", defaultValue = "")
+
+
+  public Map<String, InnerEnum> getMapOfEnumString() {
+    return mapOfEnumString;
+  }
+
+  public void setMapOfEnumString(Map<String, InnerEnum> mapOfEnumString) {
+    this.mapOfEnumString = mapOfEnumString;
+  }
+
+  public MapTest directMap(Map<String, Boolean> directMap) {
+    this.directMap = directMap;
+    return this;
+  }
+
+  public MapTest putDirectMapItem(String key, Boolean directMapItem) {
+    if (this.directMap == null) {
+      this.directMap = new HashMap<>();
+    }
+    this.directMap.put(key, directMapItem);
+    return this;
+  }
+
+  /**
+   * Get directMap
+   * @return directMap
+  */
+  @Schema(name = "directMap", defaultValue = "")
+
+
+  public Map<String, Boolean> getDirectMap() {
+    return directMap;
+  }
+
+  public void setDirectMap(Map<String, Boolean> directMap) {
+    this.directMap = directMap;
+  }
+
+  public MapTest indirectMap(Map<String, Boolean> indirectMap) {
+    this.indirectMap = indirectMap;
+    return this;
+  }
+
+  public MapTest putIndirectMapItem(String key, Boolean indirectMapItem) {
+    if (this.indirectMap == null) {
+      this.indirectMap = new HashMap<>();
+    }
+    this.indirectMap.put(key, indirectMapItem);
+    return this;
+  }
+
+  /**
+   * Get indirectMap
+   * @return indirectMap
+  */
+  @Schema(name = "indirectMap", defaultValue = "")
+
+
+  public Map<String, Boolean> getIndirectMap() {
+    return indirectMap;
+  }
+
+  public void setIndirectMap(Map<String, Boolean> indirectMap) {
+    this.indirectMap = indirectMap;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MapTest mapTest = (MapTest) o;
+    return Objects.equals(this.mapMapOfString, mapTest.mapMapOfString) &&
+        Objects.equals(this.mapOfEnumString, mapTest.mapOfEnumString) &&
+        Objects.equals(this.directMap, mapTest.directMap) &&
+        Objects.equals(this.indirectMap, mapTest.indirectMap);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(mapMapOfString, mapOfEnumString, directMap, indirectMap);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MapTest {\n");
+    
+    sb.append("    mapMapOfString: ").append(toIndentedString(mapMapOfString)).append("\n");
+    sb.append("    mapOfEnumString: ").append(toIndentedString(mapOfEnumString)).append("\n");
+    sb.append("    directMap: ").append(toIndentedString(directMap)).append("\n");
+    sb.append("    indirectMap: ").append(toIndentedString(indirectMap)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..03a7be43cc4a606ba8a493c1868c6d25eb1bfdd9
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
@@ -0,0 +1,152 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.time.OffsetDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.openapitools.model.Animal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * MixedPropertiesAndAdditionalPropertiesClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MixedPropertiesAndAdditionalPropertiesClass   {
+  @JsonProperty("uuid")
+  private UUID uuid;
+
+  @JsonProperty("dateTime")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime dateTime;
+
+  @JsonProperty("map")
+  @Valid
+  private Map<String, Animal> map = null;
+
+  public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) {
+    this.uuid = uuid;
+    return this;
+  }
+
+  /**
+   * Get uuid
+   * @return uuid
+  */
+  @Schema(name = "uuid", defaultValue = "")
+
+  @Valid
+
+  public UUID getUuid() {
+    return uuid;
+  }
+
+  public void setUuid(UUID uuid) {
+    this.uuid = uuid;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass dateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+    return this;
+  }
+
+  /**
+   * Get dateTime
+   * @return dateTime
+  */
+  @Schema(name = "dateTime", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getDateTime() {
+    return dateTime;
+  }
+
+  public void setDateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass map(Map<String, Animal> map) {
+    this.map = map;
+    return this;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal mapItem) {
+    if (this.map == null) {
+      this.map = new HashMap<>();
+    }
+    this.map.put(key, mapItem);
+    return this;
+  }
+
+  /**
+   * Get map
+   * @return map
+  */
+  @Schema(name = "map", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Animal> getMap() {
+    return map;
+  }
+
+  public void setMap(Map<String, Animal> map) {
+    this.map = map;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MixedPropertiesAndAdditionalPropertiesClass mixedPropertiesAndAdditionalPropertiesClass = (MixedPropertiesAndAdditionalPropertiesClass) o;
+    return Objects.equals(this.uuid, mixedPropertiesAndAdditionalPropertiesClass.uuid) &&
+        Objects.equals(this.dateTime, mixedPropertiesAndAdditionalPropertiesClass.dateTime) &&
+        Objects.equals(this.map, mixedPropertiesAndAdditionalPropertiesClass.map);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(uuid, dateTime, map);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MixedPropertiesAndAdditionalPropertiesClass {\n");
+    
+    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
+    sb.append("    dateTime: ").append(toIndentedString(dateTime)).append("\n");
+    sb.append("    map: ").append(toIndentedString(map)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Model200Response.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Model200Response.java
new file mode 100644
index 0000000000000000000000000000000000000000..77bf91649b08bc0b9401643f4a917f1c44ee5aef
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Model200Response.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model name starting with number
+ */
+@Schema(name = "200_response",description = "Model for testing model name starting with number")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Model200Response   {
+  @JsonProperty("name")
+  private Integer name;
+
+  @JsonProperty("class")
+  private String propertyClass;
+
+  public Model200Response name(Integer name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public Integer getName() {
+    return name;
+  }
+
+  public void setName(Integer name) {
+    this.name = name;
+  }
+
+  public Model200Response propertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+    return this;
+  }
+
+  /**
+   * Get propertyClass
+   * @return propertyClass
+  */
+  @Schema(name = "propertyClass", defaultValue = "")
+
+
+  public String getPropertyClass() {
+    return propertyClass;
+  }
+
+  public void setPropertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Model200Response _200response = (Model200Response) o;
+    return Objects.equals(this.name, _200response.name) &&
+        Objects.equals(this.propertyClass, _200response.propertyClass);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, propertyClass);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Model200Response {\n");
+    
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    propertyClass: ").append(toIndentedString(propertyClass)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ModelApiResponse.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ModelApiResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..2443600df226840aa8f7adc54617d4cca257329d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ModelApiResponse.java
@@ -0,0 +1,133 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ModelApiResponse
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelApiResponse   {
+  @JsonProperty("code")
+  private Integer code;
+
+  @JsonProperty("type")
+  private String type;
+
+  @JsonProperty("message")
+  private String message;
+
+  public ModelApiResponse code(Integer code) {
+    this.code = code;
+    return this;
+  }
+
+  /**
+   * Get code
+   * @return code
+  */
+  @Schema(name = "code", defaultValue = "")
+
+
+  public Integer getCode() {
+    return code;
+  }
+
+  public void setCode(Integer code) {
+    this.code = code;
+  }
+
+  public ModelApiResponse type(String type) {
+    this.type = type;
+    return this;
+  }
+
+  /**
+   * Get type
+   * @return type
+  */
+  @Schema(name = "type", defaultValue = "")
+
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public ModelApiResponse message(String message) {
+    this.message = message;
+    return this;
+  }
+
+  /**
+   * Get message
+   * @return message
+  */
+  @Schema(name = "message", defaultValue = "")
+
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelApiResponse _apiResponse = (ModelApiResponse) o;
+    return Objects.equals(this.code, _apiResponse.code) &&
+        Objects.equals(this.type, _apiResponse.type) &&
+        Objects.equals(this.message, _apiResponse.message);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(code, type, message);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelApiResponse {\n");
+    
+    sb.append("    code: ").append(toIndentedString(code)).append("\n");
+    sb.append("    type: ").append(toIndentedString(type)).append("\n");
+    sb.append("    message: ").append(toIndentedString(message)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ModelReturn.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ModelReturn.java
new file mode 100644
index 0000000000000000000000000000000000000000..0301a47e9f3e7c7f7c18f5cdfdcbe916c12fd340
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ModelReturn.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing reserved words
+ */
+@Schema(name = "Return",description = "Model for testing reserved words")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelReturn   {
+  @JsonProperty("return")
+  private Integer _return;
+
+  public ModelReturn _return(Integer _return) {
+    this._return = _return;
+    return this;
+  }
+
+  /**
+   * Get _return
+   * @return _return
+  */
+  @Schema(name = "_return", defaultValue = "")
+
+
+  public Integer getReturn() {
+    return _return;
+  }
+
+  public void setReturn(Integer _return) {
+    this._return = _return;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelReturn _return = (ModelReturn) o;
+    return Objects.equals(this._return, _return._return);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(_return);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelReturn {\n");
+    
+    sb.append("    _return: ").append(toIndentedString(_return)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Name.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Name.java
new file mode 100644
index 0000000000000000000000000000000000000000..62a16f80ee07ade8aaa8159110929935a3b8d6e0
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Name.java
@@ -0,0 +1,160 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model name same as property name
+ */
+@Schema(name = "Name",description = "Model for testing model name same as property name")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Name   {
+  @JsonProperty("name")
+  private Integer name;
+
+  @JsonProperty("snake_case")
+  private Integer snakeCase;
+
+  @JsonProperty("property")
+  private String property;
+
+  @JsonProperty("123Number")
+  private Integer _123number;
+
+  public Name name(Integer name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getName() {
+    return name;
+  }
+
+  public void setName(Integer name) {
+    this.name = name;
+  }
+
+  public Name snakeCase(Integer snakeCase) {
+    this.snakeCase = snakeCase;
+    return this;
+  }
+
+  /**
+   * Get snakeCase
+   * @return snakeCase
+  */
+  @Schema(name = "snakeCase", readOnly = true, defaultValue = "")
+
+
+  public Integer getSnakeCase() {
+    return snakeCase;
+  }
+
+  public void setSnakeCase(Integer snakeCase) {
+    this.snakeCase = snakeCase;
+  }
+
+  public Name property(String property) {
+    this.property = property;
+    return this;
+  }
+
+  /**
+   * Get property
+   * @return property
+  */
+  @Schema(name = "property", defaultValue = "")
+
+
+  public String getProperty() {
+    return property;
+  }
+
+  public void setProperty(String property) {
+    this.property = property;
+  }
+
+  public Name _123number(Integer _123number) {
+    this._123number = _123number;
+    return this;
+  }
+
+  /**
+   * Get _123number
+   * @return _123number
+  */
+  @Schema(name = "_123number", readOnly = true, defaultValue = "")
+
+
+  public Integer get123number() {
+    return _123number;
+  }
+
+  public void set123number(Integer _123number) {
+    this._123number = _123number;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Name name = (Name) o;
+    return Objects.equals(this.name, name.name) &&
+        Objects.equals(this.snakeCase, name.snakeCase) &&
+        Objects.equals(this.property, name.property) &&
+        Objects.equals(this._123number, name._123number);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, snakeCase, property, _123number);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Name {\n");
+    
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    snakeCase: ").append(toIndentedString(snakeCase)).append("\n");
+    sb.append("    property: ").append(toIndentedString(property)).append("\n");
+    sb.append("    _123number: ").append(toIndentedString(_123number)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/NumberOnly.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/NumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..521fad80d5a722f8bd3eb3072d330aa63ae083a3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/NumberOnly.java
@@ -0,0 +1,85 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * NumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class NumberOnly   {
+  @JsonProperty("JustNumber")
+  private BigDecimal justNumber;
+
+  public NumberOnly justNumber(BigDecimal justNumber) {
+    this.justNumber = justNumber;
+    return this;
+  }
+
+  /**
+   * Get justNumber
+   * @return justNumber
+  */
+  @Schema(name = "justNumber", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getJustNumber() {
+    return justNumber;
+  }
+
+  public void setJustNumber(BigDecimal justNumber) {
+    this.justNumber = justNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    NumberOnly numberOnly = (NumberOnly) o;
+    return Objects.equals(this.justNumber, numberOnly.justNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(justNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class NumberOnly {\n");
+    
+    sb.append("    justNumber: ").append(toIndentedString(justNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Order.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Order.java
new file mode 100644
index 0000000000000000000000000000000000000000..05071bdfe2bf754e2c7b8a18163b19c502908aff
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Order.java
@@ -0,0 +1,249 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.time.OffsetDateTime;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Order
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Order   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("petId")
+  private Long petId;
+
+  @JsonProperty("quantity")
+  private Integer quantity;
+
+  @JsonProperty("shipDate")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime shipDate;
+
+  /**
+   * Order Status
+   */
+  public enum StatusEnum {
+    PLACED("placed"),
+    
+    APPROVED("approved"),
+    
+    DELIVERED("delivered");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  @JsonProperty("complete")
+  private Boolean complete = false;
+
+  public Order id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Order petId(Long petId) {
+    this.petId = petId;
+    return this;
+  }
+
+  /**
+   * Get petId
+   * @return petId
+  */
+  @Schema(name = "petId", defaultValue = "")
+
+
+  public Long getPetId() {
+    return petId;
+  }
+
+  public void setPetId(Long petId) {
+    this.petId = petId;
+  }
+
+  public Order quantity(Integer quantity) {
+    this.quantity = quantity;
+    return this;
+  }
+
+  /**
+   * Get quantity
+   * @return quantity
+  */
+  @Schema(name = "quantity", defaultValue = "")
+
+
+  public Integer getQuantity() {
+    return quantity;
+  }
+
+  public void setQuantity(Integer quantity) {
+    this.quantity = quantity;
+  }
+
+  public Order shipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+    return this;
+  }
+
+  /**
+   * Get shipDate
+   * @return shipDate
+  */
+  @Schema(name = "shipDate", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getShipDate() {
+    return shipDate;
+  }
+
+  public void setShipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+  }
+
+  public Order status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Order Status
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "Order Status")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+  public Order complete(Boolean complete) {
+    this.complete = complete;
+    return this;
+  }
+
+  /**
+   * Get complete
+   * @return complete
+  */
+  @Schema(name = "complete", defaultValue = "")
+
+
+  public Boolean getComplete() {
+    return complete;
+  }
+
+  public void setComplete(Boolean complete) {
+    this.complete = complete;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Order order = (Order) o;
+    return Objects.equals(this.id, order.id) &&
+        Objects.equals(this.petId, order.petId) &&
+        Objects.equals(this.quantity, order.quantity) &&
+        Objects.equals(this.shipDate, order.shipDate) &&
+        Objects.equals(this.status, order.status) &&
+        Objects.equals(this.complete, order.complete);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, petId, quantity, shipDate, status, complete);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Order {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    petId: ").append(toIndentedString(petId)).append("\n");
+    sb.append("    quantity: ").append(toIndentedString(quantity)).append("\n");
+    sb.append("    shipDate: ").append(toIndentedString(shipDate)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    complete: ").append(toIndentedString(complete)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/OuterComposite.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/OuterComposite.java
new file mode 100644
index 0000000000000000000000000000000000000000..a721a3dde6a085844d35e03e0dfcf67a5febf507
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/OuterComposite.java
@@ -0,0 +1,135 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * OuterComposite
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class OuterComposite   {
+  @JsonProperty("my_number")
+  private BigDecimal myNumber;
+
+  @JsonProperty("my_string")
+  private String myString;
+
+  @JsonProperty("my_boolean")
+  private Boolean myBoolean;
+
+  public OuterComposite myNumber(BigDecimal myNumber) {
+    this.myNumber = myNumber;
+    return this;
+  }
+
+  /**
+   * Get myNumber
+   * @return myNumber
+  */
+  @Schema(name = "myNumber", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getMyNumber() {
+    return myNumber;
+  }
+
+  public void setMyNumber(BigDecimal myNumber) {
+    this.myNumber = myNumber;
+  }
+
+  public OuterComposite myString(String myString) {
+    this.myString = myString;
+    return this;
+  }
+
+  /**
+   * Get myString
+   * @return myString
+  */
+  @Schema(name = "myString", defaultValue = "")
+
+
+  public String getMyString() {
+    return myString;
+  }
+
+  public void setMyString(String myString) {
+    this.myString = myString;
+  }
+
+  public OuterComposite myBoolean(Boolean myBoolean) {
+    this.myBoolean = myBoolean;
+    return this;
+  }
+
+  /**
+   * Get myBoolean
+   * @return myBoolean
+  */
+  @Schema(name = "myBoolean", defaultValue = "")
+
+
+  public Boolean getMyBoolean() {
+    return myBoolean;
+  }
+
+  public void setMyBoolean(Boolean myBoolean) {
+    this.myBoolean = myBoolean;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    OuterComposite outerComposite = (OuterComposite) o;
+    return Objects.equals(this.myNumber, outerComposite.myNumber) &&
+        Objects.equals(this.myString, outerComposite.myString) &&
+        Objects.equals(this.myBoolean, outerComposite.myBoolean);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(myNumber, myString, myBoolean);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class OuterComposite {\n");
+    
+    sb.append("    myNumber: ").append(toIndentedString(myNumber)).append("\n");
+    sb.append("    myString: ").append(toIndentedString(myString)).append("\n");
+    sb.append("    myBoolean: ").append(toIndentedString(myBoolean)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/OuterEnum.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/OuterEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba0cca8a5e815e7cbeaade6896dd0e834ef7b4fe
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/OuterEnum.java
@@ -0,0 +1,55 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets OuterEnum
+ */
+public enum OuterEnum {
+  
+  PLACED("placed"),
+  
+  APPROVED("approved"),
+  
+  DELIVERED("delivered");
+
+  private String value;
+
+  OuterEnum(String value) {
+    this.value = value;
+  }
+
+  @JsonValue
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(value);
+  }
+
+  @JsonCreator
+  public static OuterEnum fromValue(String value) {
+    for (OuterEnum b : OuterEnum.values()) {
+      if (b.value.equals(value)) {
+        return b;
+      }
+    }
+    throw new IllegalArgumentException("Unexpected value '" + value + "'");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Pet.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Pet.java
new file mode 100644
index 0000000000000000000000000000000000000000..988eb317134d1171efe16791018e271e4bc1b30f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Pet.java
@@ -0,0 +1,273 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import org.openapitools.model.Category;
+import org.openapitools.model.Tag;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Pet
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Pet   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("category")
+  private Category category;
+
+  @JsonProperty("name")
+  private String name;
+
+  @JsonProperty("photoUrls")
+  @Valid
+  private Set<String> photoUrls = new LinkedHashSet<>();
+
+  @JsonProperty("tags")
+  @Valid
+  private List<Tag> tags = null;
+
+  /**
+   * pet status in the store
+   */
+  public enum StatusEnum {
+    AVAILABLE("available"),
+    
+    PENDING("pending"),
+    
+    SOLD("sold");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  public Pet id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Pet category(Category category) {
+    this.category = category;
+    return this;
+  }
+
+  /**
+   * Get category
+   * @return category
+  */
+  @Schema(name = "category", defaultValue = "")
+
+  @Valid
+
+  public Category getCategory() {
+    return category;
+  }
+
+  public void setCategory(Category category) {
+    this.category = category;
+  }
+
+  public Pet name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", example = "doggie", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public Pet photoUrls(Set<String> photoUrls) {
+    this.photoUrls = photoUrls;
+    return this;
+  }
+
+  public Pet addPhotoUrlsItem(String photoUrlsItem) {
+    this.photoUrls.add(photoUrlsItem);
+    return this;
+  }
+
+  /**
+   * Get photoUrls
+   * @return photoUrls
+  */
+  @Schema(name = "photoUrls", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Set<String> getPhotoUrls() {
+    return photoUrls;
+  }
+
+  @JsonDeserialize(as = LinkedHashSet.class)
+  public void setPhotoUrls(Set<String> photoUrls) {
+    this.photoUrls = photoUrls;
+  }
+
+  public Pet tags(List<Tag> tags) {
+    this.tags = tags;
+    return this;
+  }
+
+  public Pet addTagsItem(Tag tagsItem) {
+    if (this.tags == null) {
+      this.tags = new ArrayList<>();
+    }
+    this.tags.add(tagsItem);
+    return this;
+  }
+
+  /**
+   * Get tags
+   * @return tags
+  */
+  @Schema(name = "tags", defaultValue = "")
+
+  @Valid
+
+  public List<Tag> getTags() {
+    return tags;
+  }
+
+  public void setTags(List<Tag> tags) {
+    this.tags = tags;
+  }
+
+  public Pet status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * pet status in the store
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "pet status in the store")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Pet pet = (Pet) o;
+    return Objects.equals(this.id, pet.id) &&
+        Objects.equals(this.category, pet.category) &&
+        Objects.equals(this.name, pet.name) &&
+        Objects.equals(this.photoUrls, pet.photoUrls) &&
+        Objects.equals(this.tags, pet.tags) &&
+        Objects.equals(this.status, pet.status);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, category, name, photoUrls, tags, status);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Pet {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    category: ").append(toIndentedString(category)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    photoUrls: ").append(toIndentedString(photoUrls)).append("\n");
+    sb.append("    tags: ").append(toIndentedString(tags)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ReadOnlyFirst.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ReadOnlyFirst.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c51770a8e662dd5d57de2c19f502e9d536db08a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/ReadOnlyFirst.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ReadOnlyFirst
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ReadOnlyFirst   {
+  @JsonProperty("bar")
+  private String bar;
+
+  @JsonProperty("baz")
+  private String baz;
+
+  public ReadOnlyFirst bar(String bar) {
+    this.bar = bar;
+    return this;
+  }
+
+  /**
+   * Get bar
+   * @return bar
+  */
+  @Schema(name = "bar", readOnly = true, defaultValue = "")
+
+
+  public String getBar() {
+    return bar;
+  }
+
+  public void setBar(String bar) {
+    this.bar = bar;
+  }
+
+  public ReadOnlyFirst baz(String baz) {
+    this.baz = baz;
+    return this;
+  }
+
+  /**
+   * Get baz
+   * @return baz
+  */
+  @Schema(name = "baz", defaultValue = "")
+
+
+  public String getBaz() {
+    return baz;
+  }
+
+  public void setBaz(String baz) {
+    this.baz = baz;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ReadOnlyFirst readOnlyFirst = (ReadOnlyFirst) o;
+    return Objects.equals(this.bar, readOnlyFirst.bar) &&
+        Objects.equals(this.baz, readOnlyFirst.baz);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(bar, baz);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ReadOnlyFirst {\n");
+    
+    sb.append("    bar: ").append(toIndentedString(bar)).append("\n");
+    sb.append("    baz: ").append(toIndentedString(baz)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/SpecialModelName.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/SpecialModelName.java
new file mode 100644
index 0000000000000000000000000000000000000000..75f4be4e9f8f067ae60abd1268d60347d2d95724
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/SpecialModelName.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * SpecialModelName
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class SpecialModelName   {
+  @JsonProperty("$special[property.name]")
+  private Long $specialPropertyName;
+
+  public SpecialModelName $specialPropertyName(Long $specialPropertyName) {
+    this.$specialPropertyName = $specialPropertyName;
+    return this;
+  }
+
+  /**
+   * Get $specialPropertyName
+   * @return $specialPropertyName
+  */
+  @Schema(name = "$specialPropertyName", defaultValue = "")
+
+
+  public Long get$SpecialPropertyName() {
+    return $specialPropertyName;
+  }
+
+  public void set$SpecialPropertyName(Long $specialPropertyName) {
+    this.$specialPropertyName = $specialPropertyName;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SpecialModelName $specialModelName = (SpecialModelName) o;
+    return Objects.equals(this.$specialPropertyName, $specialModelName.$specialPropertyName);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash($specialPropertyName);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SpecialModelName {\n");
+    
+    sb.append("    $specialPropertyName: ").append(toIndentedString($specialPropertyName)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Tag.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Tag.java
new file mode 100644
index 0000000000000000000000000000000000000000..8722df999bfc306ae4cdd20cb567d8dd9247ac02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/Tag.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Tag
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Tag   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Tag id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Tag name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Tag tag = (Tag) o;
+    return Objects.equals(this.id, tag.id) &&
+        Objects.equals(this.name, tag.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Tag {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/TypeHolderDefault.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/TypeHolderDefault.java
new file mode 100644
index 0000000000000000000000000000000000000000..19e9bf310f769ea1e09ee1c959df0a77f3a10215
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/TypeHolderDefault.java
@@ -0,0 +1,198 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * TypeHolderDefault
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class TypeHolderDefault   {
+  @JsonProperty("string_item")
+  private String stringItem = "what";
+
+  @JsonProperty("number_item")
+  private BigDecimal numberItem;
+
+  @JsonProperty("integer_item")
+  private Integer integerItem;
+
+  @JsonProperty("bool_item")
+  private Boolean boolItem = true;
+
+  @JsonProperty("array_item")
+  @Valid
+  private List<Integer> arrayItem = new ArrayList<>();
+
+  public TypeHolderDefault stringItem(String stringItem) {
+    this.stringItem = stringItem;
+    return this;
+  }
+
+  /**
+   * Get stringItem
+   * @return stringItem
+  */
+  @Schema(name = "stringItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getStringItem() {
+    return stringItem;
+  }
+
+  public void setStringItem(String stringItem) {
+    this.stringItem = stringItem;
+  }
+
+  public TypeHolderDefault numberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+    return this;
+  }
+
+  /**
+   * Get numberItem
+   * @return numberItem
+  */
+  @Schema(name = "numberItem", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public BigDecimal getNumberItem() {
+    return numberItem;
+  }
+
+  public void setNumberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+  }
+
+  public TypeHolderDefault integerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+    return this;
+  }
+
+  /**
+   * Get integerItem
+   * @return integerItem
+  */
+  @Schema(name = "integerItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getIntegerItem() {
+    return integerItem;
+  }
+
+  public void setIntegerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+  }
+
+  public TypeHolderDefault boolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+    return this;
+  }
+
+  /**
+   * Get boolItem
+   * @return boolItem
+  */
+  @Schema(name = "boolItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Boolean getBoolItem() {
+    return boolItem;
+  }
+
+  public void setBoolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+  }
+
+  public TypeHolderDefault arrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+    return this;
+  }
+
+  public TypeHolderDefault addArrayItemItem(Integer arrayItemItem) {
+    this.arrayItem.add(arrayItemItem);
+    return this;
+  }
+
+  /**
+   * Get arrayItem
+   * @return arrayItem
+  */
+  @Schema(name = "arrayItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<Integer> getArrayItem() {
+    return arrayItem;
+  }
+
+  public void setArrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TypeHolderDefault typeHolderDefault = (TypeHolderDefault) o;
+    return Objects.equals(this.stringItem, typeHolderDefault.stringItem) &&
+        Objects.equals(this.numberItem, typeHolderDefault.numberItem) &&
+        Objects.equals(this.integerItem, typeHolderDefault.integerItem) &&
+        Objects.equals(this.boolItem, typeHolderDefault.boolItem) &&
+        Objects.equals(this.arrayItem, typeHolderDefault.arrayItem);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(stringItem, numberItem, integerItem, boolItem, arrayItem);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TypeHolderDefault {\n");
+    
+    sb.append("    stringItem: ").append(toIndentedString(stringItem)).append("\n");
+    sb.append("    numberItem: ").append(toIndentedString(numberItem)).append("\n");
+    sb.append("    integerItem: ").append(toIndentedString(integerItem)).append("\n");
+    sb.append("    boolItem: ").append(toIndentedString(boolItem)).append("\n");
+    sb.append("    arrayItem: ").append(toIndentedString(arrayItem)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/TypeHolderExample.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/TypeHolderExample.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9a3762bc74b482b1d24566ae6837fd1c4952a8f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/TypeHolderExample.java
@@ -0,0 +1,224 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * TypeHolderExample
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class TypeHolderExample   {
+  @JsonProperty("string_item")
+  private String stringItem;
+
+  @JsonProperty("number_item")
+  private BigDecimal numberItem;
+
+  @JsonProperty("float_item")
+  private Float floatItem;
+
+  @JsonProperty("integer_item")
+  private Integer integerItem;
+
+  @JsonProperty("bool_item")
+  private Boolean boolItem;
+
+  @JsonProperty("array_item")
+  @Valid
+  private List<Integer> arrayItem = new ArrayList<>();
+
+  public TypeHolderExample stringItem(String stringItem) {
+    this.stringItem = stringItem;
+    return this;
+  }
+
+  /**
+   * Get stringItem
+   * @return stringItem
+  */
+  @Schema(name = "stringItem", example = "what", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getStringItem() {
+    return stringItem;
+  }
+
+  public void setStringItem(String stringItem) {
+    this.stringItem = stringItem;
+  }
+
+  public TypeHolderExample numberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+    return this;
+  }
+
+  /**
+   * Get numberItem
+   * @return numberItem
+  */
+  @Schema(name = "numberItem", example = "1.234", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public BigDecimal getNumberItem() {
+    return numberItem;
+  }
+
+  public void setNumberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+  }
+
+  public TypeHolderExample floatItem(Float floatItem) {
+    this.floatItem = floatItem;
+    return this;
+  }
+
+  /**
+   * Get floatItem
+   * @return floatItem
+  */
+  @Schema(name = "floatItem", example = "1.234", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Float getFloatItem() {
+    return floatItem;
+  }
+
+  public void setFloatItem(Float floatItem) {
+    this.floatItem = floatItem;
+  }
+
+  public TypeHolderExample integerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+    return this;
+  }
+
+  /**
+   * Get integerItem
+   * @return integerItem
+  */
+  @Schema(name = "integerItem", example = "-2", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getIntegerItem() {
+    return integerItem;
+  }
+
+  public void setIntegerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+  }
+
+  public TypeHolderExample boolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+    return this;
+  }
+
+  /**
+   * Get boolItem
+   * @return boolItem
+  */
+  @Schema(name = "boolItem", example = "true", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Boolean getBoolItem() {
+    return boolItem;
+  }
+
+  public void setBoolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+  }
+
+  public TypeHolderExample arrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+    return this;
+  }
+
+  public TypeHolderExample addArrayItemItem(Integer arrayItemItem) {
+    this.arrayItem.add(arrayItemItem);
+    return this;
+  }
+
+  /**
+   * Get arrayItem
+   * @return arrayItem
+  */
+  @Schema(name = "arrayItem", example = "[0, 1, 2, 3]", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<Integer> getArrayItem() {
+    return arrayItem;
+  }
+
+  public void setArrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TypeHolderExample typeHolderExample = (TypeHolderExample) o;
+    return Objects.equals(this.stringItem, typeHolderExample.stringItem) &&
+        Objects.equals(this.numberItem, typeHolderExample.numberItem) &&
+        Objects.equals(this.floatItem, typeHolderExample.floatItem) &&
+        Objects.equals(this.integerItem, typeHolderExample.integerItem) &&
+        Objects.equals(this.boolItem, typeHolderExample.boolItem) &&
+        Objects.equals(this.arrayItem, typeHolderExample.arrayItem);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(stringItem, numberItem, floatItem, integerItem, boolItem, arrayItem);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TypeHolderExample {\n");
+    
+    sb.append("    stringItem: ").append(toIndentedString(stringItem)).append("\n");
+    sb.append("    numberItem: ").append(toIndentedString(numberItem)).append("\n");
+    sb.append("    floatItem: ").append(toIndentedString(floatItem)).append("\n");
+    sb.append("    integerItem: ").append(toIndentedString(integerItem)).append("\n");
+    sb.append("    boolItem: ").append(toIndentedString(boolItem)).append("\n");
+    sb.append("    arrayItem: ").append(toIndentedString(arrayItem)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/User.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..83152a155535be4664d8a23d2cadc8f922021653
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/User.java
@@ -0,0 +1,258 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * User
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class User   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("username")
+  private String username;
+
+  @JsonProperty("firstName")
+  private String firstName;
+
+  @JsonProperty("lastName")
+  private String lastName;
+
+  @JsonProperty("email")
+  private String email;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("phone")
+  private String phone;
+
+  @JsonProperty("userStatus")
+  private Integer userStatus;
+
+  public User id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public User username(String username) {
+    this.username = username;
+    return this;
+  }
+
+  /**
+   * Get username
+   * @return username
+  */
+  @Schema(name = "username", defaultValue = "")
+
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public User firstName(String firstName) {
+    this.firstName = firstName;
+    return this;
+  }
+
+  /**
+   * Get firstName
+   * @return firstName
+  */
+  @Schema(name = "firstName", defaultValue = "")
+
+
+  public String getFirstName() {
+    return firstName;
+  }
+
+  public void setFirstName(String firstName) {
+    this.firstName = firstName;
+  }
+
+  public User lastName(String lastName) {
+    this.lastName = lastName;
+    return this;
+  }
+
+  /**
+   * Get lastName
+   * @return lastName
+  */
+  @Schema(name = "lastName", defaultValue = "")
+
+
+  public String getLastName() {
+    return lastName;
+  }
+
+  public void setLastName(String lastName) {
+    this.lastName = lastName;
+  }
+
+  public User email(String email) {
+    this.email = email;
+    return this;
+  }
+
+  /**
+   * Get email
+   * @return email
+  */
+  @Schema(name = "email", defaultValue = "")
+
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+  public User password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", defaultValue = "")
+
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public User phone(String phone) {
+    this.phone = phone;
+    return this;
+  }
+
+  /**
+   * Get phone
+   * @return phone
+  */
+  @Schema(name = "phone", defaultValue = "")
+
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public User userStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+    return this;
+  }
+
+  /**
+   * User Status
+   * @return userStatus
+  */
+  @Schema(name = "userStatus", defaultValue = "User Status")
+
+
+  public Integer getUserStatus() {
+    return userStatus;
+  }
+
+  public void setUserStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    User user = (User) o;
+    return Objects.equals(this.id, user.id) &&
+        Objects.equals(this.username, user.username) &&
+        Objects.equals(this.firstName, user.firstName) &&
+        Objects.equals(this.lastName, user.lastName) &&
+        Objects.equals(this.email, user.email) &&
+        Objects.equals(this.password, user.password) &&
+        Objects.equals(this.phone, user.phone) &&
+        Objects.equals(this.userStatus, user.userStatus);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class User {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    username: ").append(toIndentedString(username)).append("\n");
+    sb.append("    firstName: ").append(toIndentedString(firstName)).append("\n");
+    sb.append("    lastName: ").append(toIndentedString(lastName)).append("\n");
+    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    phone: ").append(toIndentedString(phone)).append("\n");
+    sb.append("    userStatus: ").append(toIndentedString(userStatus)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/XmlItem.java b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/XmlItem.java
new file mode 100644
index 0000000000000000000000000000000000000000..59a183db0f62d3228837978041ec6ba77949ce09
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/XmlItem.java
@@ -0,0 +1,872 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * XmlItem
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class XmlItem   {
+  @JsonProperty("attribute_string")
+  private String attributeString;
+
+  @JsonProperty("attribute_number")
+  private BigDecimal attributeNumber;
+
+  @JsonProperty("attribute_integer")
+  private Integer attributeInteger;
+
+  @JsonProperty("attribute_boolean")
+  private Boolean attributeBoolean;
+
+  @JsonProperty("wrapped_array")
+  @Valid
+  private List<Integer> wrappedArray = null;
+
+  @JsonProperty("name_string")
+  private String nameString;
+
+  @JsonProperty("name_number")
+  private BigDecimal nameNumber;
+
+  @JsonProperty("name_integer")
+  private Integer nameInteger;
+
+  @JsonProperty("name_boolean")
+  private Boolean nameBoolean;
+
+  @JsonProperty("name_array")
+  @Valid
+  private List<Integer> nameArray = null;
+
+  @JsonProperty("name_wrapped_array")
+  @Valid
+  private List<Integer> nameWrappedArray = null;
+
+  @JsonProperty("prefix_string")
+  private String prefixString;
+
+  @JsonProperty("prefix_number")
+  private BigDecimal prefixNumber;
+
+  @JsonProperty("prefix_integer")
+  private Integer prefixInteger;
+
+  @JsonProperty("prefix_boolean")
+  private Boolean prefixBoolean;
+
+  @JsonProperty("prefix_array")
+  @Valid
+  private List<Integer> prefixArray = null;
+
+  @JsonProperty("prefix_wrapped_array")
+  @Valid
+  private List<Integer> prefixWrappedArray = null;
+
+  @JsonProperty("namespace_string")
+  private String namespaceString;
+
+  @JsonProperty("namespace_number")
+  private BigDecimal namespaceNumber;
+
+  @JsonProperty("namespace_integer")
+  private Integer namespaceInteger;
+
+  @JsonProperty("namespace_boolean")
+  private Boolean namespaceBoolean;
+
+  @JsonProperty("namespace_array")
+  @Valid
+  private List<Integer> namespaceArray = null;
+
+  @JsonProperty("namespace_wrapped_array")
+  @Valid
+  private List<Integer> namespaceWrappedArray = null;
+
+  @JsonProperty("prefix_ns_string")
+  private String prefixNsString;
+
+  @JsonProperty("prefix_ns_number")
+  private BigDecimal prefixNsNumber;
+
+  @JsonProperty("prefix_ns_integer")
+  private Integer prefixNsInteger;
+
+  @JsonProperty("prefix_ns_boolean")
+  private Boolean prefixNsBoolean;
+
+  @JsonProperty("prefix_ns_array")
+  @Valid
+  private List<Integer> prefixNsArray = null;
+
+  @JsonProperty("prefix_ns_wrapped_array")
+  @Valid
+  private List<Integer> prefixNsWrappedArray = null;
+
+  public XmlItem attributeString(String attributeString) {
+    this.attributeString = attributeString;
+    return this;
+  }
+
+  /**
+   * Get attributeString
+   * @return attributeString
+  */
+  @Schema(name = "attributeString", example = "string", defaultValue = "")
+
+
+  public String getAttributeString() {
+    return attributeString;
+  }
+
+  public void setAttributeString(String attributeString) {
+    this.attributeString = attributeString;
+  }
+
+  public XmlItem attributeNumber(BigDecimal attributeNumber) {
+    this.attributeNumber = attributeNumber;
+    return this;
+  }
+
+  /**
+   * Get attributeNumber
+   * @return attributeNumber
+  */
+  @Schema(name = "attributeNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getAttributeNumber() {
+    return attributeNumber;
+  }
+
+  public void setAttributeNumber(BigDecimal attributeNumber) {
+    this.attributeNumber = attributeNumber;
+  }
+
+  public XmlItem attributeInteger(Integer attributeInteger) {
+    this.attributeInteger = attributeInteger;
+    return this;
+  }
+
+  /**
+   * Get attributeInteger
+   * @return attributeInteger
+  */
+  @Schema(name = "attributeInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getAttributeInteger() {
+    return attributeInteger;
+  }
+
+  public void setAttributeInteger(Integer attributeInteger) {
+    this.attributeInteger = attributeInteger;
+  }
+
+  public XmlItem attributeBoolean(Boolean attributeBoolean) {
+    this.attributeBoolean = attributeBoolean;
+    return this;
+  }
+
+  /**
+   * Get attributeBoolean
+   * @return attributeBoolean
+  */
+  @Schema(name = "attributeBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getAttributeBoolean() {
+    return attributeBoolean;
+  }
+
+  public void setAttributeBoolean(Boolean attributeBoolean) {
+    this.attributeBoolean = attributeBoolean;
+  }
+
+  public XmlItem wrappedArray(List<Integer> wrappedArray) {
+    this.wrappedArray = wrappedArray;
+    return this;
+  }
+
+  public XmlItem addWrappedArrayItem(Integer wrappedArrayItem) {
+    if (this.wrappedArray == null) {
+      this.wrappedArray = new ArrayList<>();
+    }
+    this.wrappedArray.add(wrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get wrappedArray
+   * @return wrappedArray
+  */
+  @Schema(name = "wrappedArray", defaultValue = "")
+
+
+  public List<Integer> getWrappedArray() {
+    return wrappedArray;
+  }
+
+  public void setWrappedArray(List<Integer> wrappedArray) {
+    this.wrappedArray = wrappedArray;
+  }
+
+  public XmlItem nameString(String nameString) {
+    this.nameString = nameString;
+    return this;
+  }
+
+  /**
+   * Get nameString
+   * @return nameString
+  */
+  @Schema(name = "nameString", example = "string", defaultValue = "")
+
+
+  public String getNameString() {
+    return nameString;
+  }
+
+  public void setNameString(String nameString) {
+    this.nameString = nameString;
+  }
+
+  public XmlItem nameNumber(BigDecimal nameNumber) {
+    this.nameNumber = nameNumber;
+    return this;
+  }
+
+  /**
+   * Get nameNumber
+   * @return nameNumber
+  */
+  @Schema(name = "nameNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getNameNumber() {
+    return nameNumber;
+  }
+
+  public void setNameNumber(BigDecimal nameNumber) {
+    this.nameNumber = nameNumber;
+  }
+
+  public XmlItem nameInteger(Integer nameInteger) {
+    this.nameInteger = nameInteger;
+    return this;
+  }
+
+  /**
+   * Get nameInteger
+   * @return nameInteger
+  */
+  @Schema(name = "nameInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getNameInteger() {
+    return nameInteger;
+  }
+
+  public void setNameInteger(Integer nameInteger) {
+    this.nameInteger = nameInteger;
+  }
+
+  public XmlItem nameBoolean(Boolean nameBoolean) {
+    this.nameBoolean = nameBoolean;
+    return this;
+  }
+
+  /**
+   * Get nameBoolean
+   * @return nameBoolean
+  */
+  @Schema(name = "nameBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getNameBoolean() {
+    return nameBoolean;
+  }
+
+  public void setNameBoolean(Boolean nameBoolean) {
+    this.nameBoolean = nameBoolean;
+  }
+
+  public XmlItem nameArray(List<Integer> nameArray) {
+    this.nameArray = nameArray;
+    return this;
+  }
+
+  public XmlItem addNameArrayItem(Integer nameArrayItem) {
+    if (this.nameArray == null) {
+      this.nameArray = new ArrayList<>();
+    }
+    this.nameArray.add(nameArrayItem);
+    return this;
+  }
+
+  /**
+   * Get nameArray
+   * @return nameArray
+  */
+  @Schema(name = "nameArray", defaultValue = "")
+
+
+  public List<Integer> getNameArray() {
+    return nameArray;
+  }
+
+  public void setNameArray(List<Integer> nameArray) {
+    this.nameArray = nameArray;
+  }
+
+  public XmlItem nameWrappedArray(List<Integer> nameWrappedArray) {
+    this.nameWrappedArray = nameWrappedArray;
+    return this;
+  }
+
+  public XmlItem addNameWrappedArrayItem(Integer nameWrappedArrayItem) {
+    if (this.nameWrappedArray == null) {
+      this.nameWrappedArray = new ArrayList<>();
+    }
+    this.nameWrappedArray.add(nameWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get nameWrappedArray
+   * @return nameWrappedArray
+  */
+  @Schema(name = "nameWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getNameWrappedArray() {
+    return nameWrappedArray;
+  }
+
+  public void setNameWrappedArray(List<Integer> nameWrappedArray) {
+    this.nameWrappedArray = nameWrappedArray;
+  }
+
+  public XmlItem prefixString(String prefixString) {
+    this.prefixString = prefixString;
+    return this;
+  }
+
+  /**
+   * Get prefixString
+   * @return prefixString
+  */
+  @Schema(name = "prefixString", example = "string", defaultValue = "")
+
+
+  public String getPrefixString() {
+    return prefixString;
+  }
+
+  public void setPrefixString(String prefixString) {
+    this.prefixString = prefixString;
+  }
+
+  public XmlItem prefixNumber(BigDecimal prefixNumber) {
+    this.prefixNumber = prefixNumber;
+    return this;
+  }
+
+  /**
+   * Get prefixNumber
+   * @return prefixNumber
+  */
+  @Schema(name = "prefixNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getPrefixNumber() {
+    return prefixNumber;
+  }
+
+  public void setPrefixNumber(BigDecimal prefixNumber) {
+    this.prefixNumber = prefixNumber;
+  }
+
+  public XmlItem prefixInteger(Integer prefixInteger) {
+    this.prefixInteger = prefixInteger;
+    return this;
+  }
+
+  /**
+   * Get prefixInteger
+   * @return prefixInteger
+  */
+  @Schema(name = "prefixInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getPrefixInteger() {
+    return prefixInteger;
+  }
+
+  public void setPrefixInteger(Integer prefixInteger) {
+    this.prefixInteger = prefixInteger;
+  }
+
+  public XmlItem prefixBoolean(Boolean prefixBoolean) {
+    this.prefixBoolean = prefixBoolean;
+    return this;
+  }
+
+  /**
+   * Get prefixBoolean
+   * @return prefixBoolean
+  */
+  @Schema(name = "prefixBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getPrefixBoolean() {
+    return prefixBoolean;
+  }
+
+  public void setPrefixBoolean(Boolean prefixBoolean) {
+    this.prefixBoolean = prefixBoolean;
+  }
+
+  public XmlItem prefixArray(List<Integer> prefixArray) {
+    this.prefixArray = prefixArray;
+    return this;
+  }
+
+  public XmlItem addPrefixArrayItem(Integer prefixArrayItem) {
+    if (this.prefixArray == null) {
+      this.prefixArray = new ArrayList<>();
+    }
+    this.prefixArray.add(prefixArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixArray
+   * @return prefixArray
+  */
+  @Schema(name = "prefixArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixArray() {
+    return prefixArray;
+  }
+
+  public void setPrefixArray(List<Integer> prefixArray) {
+    this.prefixArray = prefixArray;
+  }
+
+  public XmlItem prefixWrappedArray(List<Integer> prefixWrappedArray) {
+    this.prefixWrappedArray = prefixWrappedArray;
+    return this;
+  }
+
+  public XmlItem addPrefixWrappedArrayItem(Integer prefixWrappedArrayItem) {
+    if (this.prefixWrappedArray == null) {
+      this.prefixWrappedArray = new ArrayList<>();
+    }
+    this.prefixWrappedArray.add(prefixWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixWrappedArray
+   * @return prefixWrappedArray
+  */
+  @Schema(name = "prefixWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixWrappedArray() {
+    return prefixWrappedArray;
+  }
+
+  public void setPrefixWrappedArray(List<Integer> prefixWrappedArray) {
+    this.prefixWrappedArray = prefixWrappedArray;
+  }
+
+  public XmlItem namespaceString(String namespaceString) {
+    this.namespaceString = namespaceString;
+    return this;
+  }
+
+  /**
+   * Get namespaceString
+   * @return namespaceString
+  */
+  @Schema(name = "namespaceString", example = "string", defaultValue = "")
+
+
+  public String getNamespaceString() {
+    return namespaceString;
+  }
+
+  public void setNamespaceString(String namespaceString) {
+    this.namespaceString = namespaceString;
+  }
+
+  public XmlItem namespaceNumber(BigDecimal namespaceNumber) {
+    this.namespaceNumber = namespaceNumber;
+    return this;
+  }
+
+  /**
+   * Get namespaceNumber
+   * @return namespaceNumber
+  */
+  @Schema(name = "namespaceNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getNamespaceNumber() {
+    return namespaceNumber;
+  }
+
+  public void setNamespaceNumber(BigDecimal namespaceNumber) {
+    this.namespaceNumber = namespaceNumber;
+  }
+
+  public XmlItem namespaceInteger(Integer namespaceInteger) {
+    this.namespaceInteger = namespaceInteger;
+    return this;
+  }
+
+  /**
+   * Get namespaceInteger
+   * @return namespaceInteger
+  */
+  @Schema(name = "namespaceInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getNamespaceInteger() {
+    return namespaceInteger;
+  }
+
+  public void setNamespaceInteger(Integer namespaceInteger) {
+    this.namespaceInteger = namespaceInteger;
+  }
+
+  public XmlItem namespaceBoolean(Boolean namespaceBoolean) {
+    this.namespaceBoolean = namespaceBoolean;
+    return this;
+  }
+
+  /**
+   * Get namespaceBoolean
+   * @return namespaceBoolean
+  */
+  @Schema(name = "namespaceBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getNamespaceBoolean() {
+    return namespaceBoolean;
+  }
+
+  public void setNamespaceBoolean(Boolean namespaceBoolean) {
+    this.namespaceBoolean = namespaceBoolean;
+  }
+
+  public XmlItem namespaceArray(List<Integer> namespaceArray) {
+    this.namespaceArray = namespaceArray;
+    return this;
+  }
+
+  public XmlItem addNamespaceArrayItem(Integer namespaceArrayItem) {
+    if (this.namespaceArray == null) {
+      this.namespaceArray = new ArrayList<>();
+    }
+    this.namespaceArray.add(namespaceArrayItem);
+    return this;
+  }
+
+  /**
+   * Get namespaceArray
+   * @return namespaceArray
+  */
+  @Schema(name = "namespaceArray", defaultValue = "")
+
+
+  public List<Integer> getNamespaceArray() {
+    return namespaceArray;
+  }
+
+  public void setNamespaceArray(List<Integer> namespaceArray) {
+    this.namespaceArray = namespaceArray;
+  }
+
+  public XmlItem namespaceWrappedArray(List<Integer> namespaceWrappedArray) {
+    this.namespaceWrappedArray = namespaceWrappedArray;
+    return this;
+  }
+
+  public XmlItem addNamespaceWrappedArrayItem(Integer namespaceWrappedArrayItem) {
+    if (this.namespaceWrappedArray == null) {
+      this.namespaceWrappedArray = new ArrayList<>();
+    }
+    this.namespaceWrappedArray.add(namespaceWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get namespaceWrappedArray
+   * @return namespaceWrappedArray
+  */
+  @Schema(name = "namespaceWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getNamespaceWrappedArray() {
+    return namespaceWrappedArray;
+  }
+
+  public void setNamespaceWrappedArray(List<Integer> namespaceWrappedArray) {
+    this.namespaceWrappedArray = namespaceWrappedArray;
+  }
+
+  public XmlItem prefixNsString(String prefixNsString) {
+    this.prefixNsString = prefixNsString;
+    return this;
+  }
+
+  /**
+   * Get prefixNsString
+   * @return prefixNsString
+  */
+  @Schema(name = "prefixNsString", example = "string", defaultValue = "")
+
+
+  public String getPrefixNsString() {
+    return prefixNsString;
+  }
+
+  public void setPrefixNsString(String prefixNsString) {
+    this.prefixNsString = prefixNsString;
+  }
+
+  public XmlItem prefixNsNumber(BigDecimal prefixNsNumber) {
+    this.prefixNsNumber = prefixNsNumber;
+    return this;
+  }
+
+  /**
+   * Get prefixNsNumber
+   * @return prefixNsNumber
+  */
+  @Schema(name = "prefixNsNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getPrefixNsNumber() {
+    return prefixNsNumber;
+  }
+
+  public void setPrefixNsNumber(BigDecimal prefixNsNumber) {
+    this.prefixNsNumber = prefixNsNumber;
+  }
+
+  public XmlItem prefixNsInteger(Integer prefixNsInteger) {
+    this.prefixNsInteger = prefixNsInteger;
+    return this;
+  }
+
+  /**
+   * Get prefixNsInteger
+   * @return prefixNsInteger
+  */
+  @Schema(name = "prefixNsInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getPrefixNsInteger() {
+    return prefixNsInteger;
+  }
+
+  public void setPrefixNsInteger(Integer prefixNsInteger) {
+    this.prefixNsInteger = prefixNsInteger;
+  }
+
+  public XmlItem prefixNsBoolean(Boolean prefixNsBoolean) {
+    this.prefixNsBoolean = prefixNsBoolean;
+    return this;
+  }
+
+  /**
+   * Get prefixNsBoolean
+   * @return prefixNsBoolean
+  */
+  @Schema(name = "prefixNsBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getPrefixNsBoolean() {
+    return prefixNsBoolean;
+  }
+
+  public void setPrefixNsBoolean(Boolean prefixNsBoolean) {
+    this.prefixNsBoolean = prefixNsBoolean;
+  }
+
+  public XmlItem prefixNsArray(List<Integer> prefixNsArray) {
+    this.prefixNsArray = prefixNsArray;
+    return this;
+  }
+
+  public XmlItem addPrefixNsArrayItem(Integer prefixNsArrayItem) {
+    if (this.prefixNsArray == null) {
+      this.prefixNsArray = new ArrayList<>();
+    }
+    this.prefixNsArray.add(prefixNsArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixNsArray
+   * @return prefixNsArray
+  */
+  @Schema(name = "prefixNsArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixNsArray() {
+    return prefixNsArray;
+  }
+
+  public void setPrefixNsArray(List<Integer> prefixNsArray) {
+    this.prefixNsArray = prefixNsArray;
+  }
+
+  public XmlItem prefixNsWrappedArray(List<Integer> prefixNsWrappedArray) {
+    this.prefixNsWrappedArray = prefixNsWrappedArray;
+    return this;
+  }
+
+  public XmlItem addPrefixNsWrappedArrayItem(Integer prefixNsWrappedArrayItem) {
+    if (this.prefixNsWrappedArray == null) {
+      this.prefixNsWrappedArray = new ArrayList<>();
+    }
+    this.prefixNsWrappedArray.add(prefixNsWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixNsWrappedArray
+   * @return prefixNsWrappedArray
+  */
+  @Schema(name = "prefixNsWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixNsWrappedArray() {
+    return prefixNsWrappedArray;
+  }
+
+  public void setPrefixNsWrappedArray(List<Integer> prefixNsWrappedArray) {
+    this.prefixNsWrappedArray = prefixNsWrappedArray;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    XmlItem xmlItem = (XmlItem) o;
+    return Objects.equals(this.attributeString, xmlItem.attributeString) &&
+        Objects.equals(this.attributeNumber, xmlItem.attributeNumber) &&
+        Objects.equals(this.attributeInteger, xmlItem.attributeInteger) &&
+        Objects.equals(this.attributeBoolean, xmlItem.attributeBoolean) &&
+        Objects.equals(this.wrappedArray, xmlItem.wrappedArray) &&
+        Objects.equals(this.nameString, xmlItem.nameString) &&
+        Objects.equals(this.nameNumber, xmlItem.nameNumber) &&
+        Objects.equals(this.nameInteger, xmlItem.nameInteger) &&
+        Objects.equals(this.nameBoolean, xmlItem.nameBoolean) &&
+        Objects.equals(this.nameArray, xmlItem.nameArray) &&
+        Objects.equals(this.nameWrappedArray, xmlItem.nameWrappedArray) &&
+        Objects.equals(this.prefixString, xmlItem.prefixString) &&
+        Objects.equals(this.prefixNumber, xmlItem.prefixNumber) &&
+        Objects.equals(this.prefixInteger, xmlItem.prefixInteger) &&
+        Objects.equals(this.prefixBoolean, xmlItem.prefixBoolean) &&
+        Objects.equals(this.prefixArray, xmlItem.prefixArray) &&
+        Objects.equals(this.prefixWrappedArray, xmlItem.prefixWrappedArray) &&
+        Objects.equals(this.namespaceString, xmlItem.namespaceString) &&
+        Objects.equals(this.namespaceNumber, xmlItem.namespaceNumber) &&
+        Objects.equals(this.namespaceInteger, xmlItem.namespaceInteger) &&
+        Objects.equals(this.namespaceBoolean, xmlItem.namespaceBoolean) &&
+        Objects.equals(this.namespaceArray, xmlItem.namespaceArray) &&
+        Objects.equals(this.namespaceWrappedArray, xmlItem.namespaceWrappedArray) &&
+        Objects.equals(this.prefixNsString, xmlItem.prefixNsString) &&
+        Objects.equals(this.prefixNsNumber, xmlItem.prefixNsNumber) &&
+        Objects.equals(this.prefixNsInteger, xmlItem.prefixNsInteger) &&
+        Objects.equals(this.prefixNsBoolean, xmlItem.prefixNsBoolean) &&
+        Objects.equals(this.prefixNsArray, xmlItem.prefixNsArray) &&
+        Objects.equals(this.prefixNsWrappedArray, xmlItem.prefixNsWrappedArray);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(attributeString, attributeNumber, attributeInteger, attributeBoolean, wrappedArray, nameString, nameNumber, nameInteger, nameBoolean, nameArray, nameWrappedArray, prefixString, prefixNumber, prefixInteger, prefixBoolean, prefixArray, prefixWrappedArray, namespaceString, namespaceNumber, namespaceInteger, namespaceBoolean, namespaceArray, namespaceWrappedArray, prefixNsString, prefixNsNumber, prefixNsInteger, prefixNsBoolean, prefixNsArray, prefixNsWrappedArray);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class XmlItem {\n");
+    
+    sb.append("    attributeString: ").append(toIndentedString(attributeString)).append("\n");
+    sb.append("    attributeNumber: ").append(toIndentedString(attributeNumber)).append("\n");
+    sb.append("    attributeInteger: ").append(toIndentedString(attributeInteger)).append("\n");
+    sb.append("    attributeBoolean: ").append(toIndentedString(attributeBoolean)).append("\n");
+    sb.append("    wrappedArray: ").append(toIndentedString(wrappedArray)).append("\n");
+    sb.append("    nameString: ").append(toIndentedString(nameString)).append("\n");
+    sb.append("    nameNumber: ").append(toIndentedString(nameNumber)).append("\n");
+    sb.append("    nameInteger: ").append(toIndentedString(nameInteger)).append("\n");
+    sb.append("    nameBoolean: ").append(toIndentedString(nameBoolean)).append("\n");
+    sb.append("    nameArray: ").append(toIndentedString(nameArray)).append("\n");
+    sb.append("    nameWrappedArray: ").append(toIndentedString(nameWrappedArray)).append("\n");
+    sb.append("    prefixString: ").append(toIndentedString(prefixString)).append("\n");
+    sb.append("    prefixNumber: ").append(toIndentedString(prefixNumber)).append("\n");
+    sb.append("    prefixInteger: ").append(toIndentedString(prefixInteger)).append("\n");
+    sb.append("    prefixBoolean: ").append(toIndentedString(prefixBoolean)).append("\n");
+    sb.append("    prefixArray: ").append(toIndentedString(prefixArray)).append("\n");
+    sb.append("    prefixWrappedArray: ").append(toIndentedString(prefixWrappedArray)).append("\n");
+    sb.append("    namespaceString: ").append(toIndentedString(namespaceString)).append("\n");
+    sb.append("    namespaceNumber: ").append(toIndentedString(namespaceNumber)).append("\n");
+    sb.append("    namespaceInteger: ").append(toIndentedString(namespaceInteger)).append("\n");
+    sb.append("    namespaceBoolean: ").append(toIndentedString(namespaceBoolean)).append("\n");
+    sb.append("    namespaceArray: ").append(toIndentedString(namespaceArray)).append("\n");
+    sb.append("    namespaceWrappedArray: ").append(toIndentedString(namespaceWrappedArray)).append("\n");
+    sb.append("    prefixNsString: ").append(toIndentedString(prefixNsString)).append("\n");
+    sb.append("    prefixNsNumber: ").append(toIndentedString(prefixNsNumber)).append("\n");
+    sb.append("    prefixNsInteger: ").append(toIndentedString(prefixNsInteger)).append("\n");
+    sb.append("    prefixNsBoolean: ").append(toIndentedString(prefixNsBoolean)).append("\n");
+    sb.append("    prefixNsArray: ").append(toIndentedString(prefixNsArray)).append("\n");
+    sb.append("    prefixNsWrappedArray: ").append(toIndentedString(prefixNsWrappedArray)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/resources/application.properties b/samples/openapi3/server/petstore/springboot-delegate/src/main/resources/application.properties
new file mode 100644
index 0000000000000000000000000000000000000000..9d06609db665e4097670b78b2c2adb4876cfc81f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/resources/application.properties
@@ -0,0 +1,3 @@
+server.port=80
+spring.jackson.date-format=org.openapitools.RFC3339DateFormat
+spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
diff --git a/samples/openapi3/server/petstore/springboot-delegate/src/main/resources/openapi.yaml b/samples/openapi3/server/petstore/springboot-delegate/src/main/resources/openapi.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d6386dc39bf4ff458f7db1f6e23a6e1e22b7e8c6
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-delegate/src/main/resources/openapi.yaml
@@ -0,0 +1,2264 @@
+openapi: 3.0.1
+info:
+  description: 'This spec is mainly for testing Petstore server and contains fake
+    endpoints, models. Please do not use this for any other purpose. Special characters:
+    " \'
+  license:
+    name: Apache-2.0
+    url: https://www.apache.org/licenses/LICENSE-2.0.html
+  title: OpenAPI Petstore
+  version: 1.0.0
+servers:
+- url: http://petstore.swagger.io:80/v2
+tags:
+- description: Everything about your Pets
+  name: pet
+- description: Access to Petstore orders
+  name: store
+- description: Operations about user
+  name: user
+paths:
+  /pet:
+    post:
+      operationId: addPet
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Pet'
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/Pet'
+        description: Pet object that needs to be added to the store
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "405":
+          content: {}
+          description: Invalid input
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Add a new pet to the store
+      tags:
+      - pet
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    put:
+      operationId: updatePet
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Pet'
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/Pet'
+        description: Pet object that needs to be added to the store
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Pet not found
+        "405":
+          content: {}
+          description: Validation exception
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Update an existing pet
+      tags:
+      - pet
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/findByStatus:
+    get:
+      description: Multiple status values can be provided with comma separated strings
+      operationId: findPetsByStatus
+      parameters:
+      - description: Status values that need to be considered for filter
+        explode: false
+        in: query
+        name: status
+        required: true
+        schema:
+          items:
+            default: available
+            enum:
+            - available
+            - pending
+            - sold
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid status value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Finds Pets by status
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/findByTags:
+    get:
+      deprecated: true
+      description: Multiple tags can be provided with comma separated strings. Use
+        tag1, tag2, tag3 for testing.
+      operationId: findPetsByTags
+      parameters:
+      - description: Tags to filter by
+        explode: false
+        in: query
+        name: tags
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+          uniqueItems: true
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+                uniqueItems: true
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+                uniqueItems: true
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid tag value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Finds Pets by tags
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/{petId}:
+    delete:
+      operationId: deletePet
+      parameters:
+      - in: header
+        name: api_key
+        schema:
+          type: string
+      - description: Pet id to delete
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid pet value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Deletes a pet
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    get:
+      description: Returns a single pet
+      operationId: getPetById
+      parameters:
+      - description: ID of pet to return
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Pet'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Pet'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Pet not found
+      security:
+      - api_key: []
+      summary: Find pet by ID
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    post:
+      operationId: updatePetWithForm
+      parameters:
+      - description: ID of pet that needs to be updated
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                name:
+                  description: Updated name of the pet
+                  type: string
+                status:
+                  description: Updated status of the pet
+                  type: string
+      responses:
+        "405":
+          content: {}
+          description: Invalid input
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Updates a pet in the store with form data
+      tags:
+      - pet
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/{petId}/uploadImage:
+    post:
+      operationId: uploadFile
+      parameters:
+      - description: ID of pet to update
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                additionalMetadata:
+                  description: Additional data to pass to server
+                  type: string
+                file:
+                  description: file to upload
+                  format: binary
+                  type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiResponse'
+          description: successful operation
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: uploads an image
+      tags:
+      - pet
+      x-contentType: multipart/form-data
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /store/inventory:
+    get:
+      description: Returns a map of status codes to quantities
+      operationId: getInventory
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                additionalProperties:
+                  format: int32
+                  type: integer
+                type: object
+          description: successful operation
+      security:
+      - api_key: []
+      summary: Returns pet inventories by status
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /store/order:
+    post:
+      operationId: placeOrder
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/Order'
+        description: order placed for purchasing the pet
+        required: true
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Order'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Order'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid Order
+      summary: Place an order for a pet
+      tags:
+      - store
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /store/order/{order_id}:
+    delete:
+      description: For valid response try integer IDs with value < 1000. Anything
+        above 1000 or nonintegers will generate API errors
+      operationId: deleteOrder
+      parameters:
+      - description: ID of the order that needs to be deleted
+        in: path
+        name: order_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Order not found
+      summary: Delete purchase order by ID
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+    get:
+      description: For valid response try integer IDs with value <= 5 or > 10. Other
+        values will generated exceptions
+      operationId: getOrderById
+      parameters:
+      - description: ID of pet that needs to be fetched
+        in: path
+        name: order_id
+        required: true
+        schema:
+          format: int64
+          maximum: 5
+          minimum: 1
+          type: integer
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Order'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Order'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Order not found
+      summary: Find purchase order by ID
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /user:
+    post:
+      description: This can only be done by the logged in user.
+      operationId: createUser
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/User'
+        description: Created user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Create user
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/createWithArray:
+    post:
+      operationId: createUsersWithArrayInput
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                $ref: '#/components/schemas/User'
+              type: array
+        description: List of user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Creates list of users with given input array
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/createWithList:
+    post:
+      operationId: createUsersWithListInput
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                $ref: '#/components/schemas/User'
+              type: array
+        description: List of user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Creates list of users with given input array
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/login:
+    get:
+      operationId: loginUser
+      parameters:
+      - description: The user name for login
+        in: query
+        name: username
+        required: true
+        schema:
+          type: string
+      - description: The password for login in clear text
+        in: query
+        name: password
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                type: string
+            application/json:
+              schema:
+                type: string
+          description: successful operation
+          headers:
+            X-Rate-Limit:
+              description: calls per hour allowed by the user
+              schema:
+                format: int32
+                type: integer
+            X-Expires-After:
+              description: date in UTC when token expires
+              schema:
+                format: date-time
+                type: string
+        "400":
+          content: {}
+          description: Invalid username/password supplied
+      summary: Logs user into the system
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/logout:
+    get:
+      operationId: logoutUser
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Logs out current logged in user session
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/{username}:
+    delete:
+      description: This can only be done by the logged in user.
+      operationId: deleteUser
+      parameters:
+      - description: The name that needs to be deleted
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Delete user
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+    get:
+      operationId: getUserByName
+      parameters:
+      - description: The name that needs to be fetched. Use user1 for testing.
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/User'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/User'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Get user by user name
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+    put:
+      description: This can only be done by the logged in user.
+      operationId: updateUser
+      parameters:
+      - description: name that need to be deleted
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/User'
+        description: Updated user object
+        required: true
+      responses:
+        "400":
+          content: {}
+          description: Invalid user supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Updated user
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /fake_classname_test:
+    patch:
+      description: To test class name in snake case
+      operationId: testClassname
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      security:
+      - api_key_query: []
+      summary: To test class name in snake case
+      tags:
+      - fake_classname_tags 123#$%^
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake_classname_tags 123#$%^
+  /fake:
+    delete:
+      description: Fake endpoint to test group parameters (optional)
+      operationId: testGroupParameters
+      parameters:
+      - description: Required String in group parameters
+        in: query
+        name: required_string_group
+        required: true
+        schema:
+          type: integer
+      - description: Required Boolean in group parameters
+        in: header
+        name: required_boolean_group
+        required: true
+        schema:
+          type: boolean
+      - description: Required Integer in group parameters
+        in: query
+        name: required_int64_group
+        required: true
+        schema:
+          format: int64
+          type: integer
+      - description: String in group parameters
+        in: query
+        name: string_group
+        schema:
+          type: integer
+      - description: Boolean in group parameters
+        in: header
+        name: boolean_group
+        schema:
+          type: boolean
+      - description: Integer in group parameters
+        in: query
+        name: int64_group
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "400":
+          content: {}
+          description: Someting wrong
+      summary: Fake endpoint to test group parameters (optional)
+      tags:
+      - fake
+      x-group-parameters: true
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    get:
+      description: To test enum parameters
+      operationId: testEnumParameters
+      parameters:
+      - description: Header parameter enum test (string array)
+        explode: false
+        in: header
+        name: enum_header_string_array
+        schema:
+          items:
+            default: $
+            enum:
+            - '>'
+            - $
+            type: string
+          type: array
+        style: simple
+      - description: Header parameter enum test (string)
+        in: header
+        name: enum_header_string
+        schema:
+          default: -efg
+          enum:
+          - _abc
+          - -efg
+          - (xyz)
+          type: string
+      - description: Query parameter enum test (string array)
+        explode: false
+        in: query
+        name: enum_query_string_array
+        schema:
+          items:
+            default: $
+            enum:
+            - '>'
+            - $
+            type: string
+          type: array
+        style: form
+      - description: Query parameter enum test (string)
+        in: query
+        name: enum_query_string
+        schema:
+          default: -efg
+          enum:
+          - _abc
+          - -efg
+          - (xyz)
+          type: string
+      - description: Query parameter enum test (double)
+        in: query
+        name: enum_query_integer
+        schema:
+          enum:
+          - 1
+          - -2
+          format: int32
+          type: integer
+      - description: Query parameter enum test (double)
+        in: query
+        name: enum_query_double
+        schema:
+          enum:
+          - 1.1
+          - -1.2
+          format: double
+          type: number
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                enum_form_string_array:
+                  description: Form parameter enum test (string array)
+                  items:
+                    default: $
+                    enum:
+                    - '>'
+                    - $
+                    type: string
+                  type: array
+                enum_form_string:
+                  default: -efg
+                  description: Form parameter enum test (string)
+                  enum:
+                  - _abc
+                  - -efg
+                  - (xyz)
+                  type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid request
+        "404":
+          content: {}
+          description: Not found
+      summary: To test enum parameters
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    patch:
+      description: To test "client" model
+      operationId: testClientModel
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      summary: To test "client" model
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    post:
+      description: |-
+        Fake endpoint for testing various parameters
+         假端點
+         偽のエンドポイント
+         가짜 엔드 포인트
+      operationId: testEndpointParameters
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                integer:
+                  description: None
+                  format: int32
+                  maximum: 100
+                  minimum: 10
+                  type: integer
+                int32:
+                  description: None
+                  format: int32
+                  maximum: 200
+                  minimum: 20
+                  type: integer
+                int64:
+                  description: None
+                  format: int64
+                  type: integer
+                number:
+                  description: None
+                  maximum: 543.2
+                  minimum: 32.1
+                  type: number
+                float:
+                  description: None
+                  format: float
+                  maximum: 987.6
+                  type: number
+                double:
+                  description: None
+                  format: double
+                  maximum: 123.4
+                  minimum: 67.8
+                  type: number
+                string:
+                  description: None
+                  pattern: /[a-z]/i
+                  type: string
+                pattern_without_delimiter:
+                  description: None
+                  pattern: ^[A-Z].*
+                  type: string
+                byte:
+                  description: None
+                  format: byte
+                  type: string
+                binary:
+                  description: None
+                  format: binary
+                  type: string
+                date:
+                  description: None
+                  format: date
+                  type: string
+                dateTime:
+                  description: None
+                  format: date-time
+                  type: string
+                password:
+                  description: None
+                  format: password
+                  maxLength: 64
+                  minLength: 10
+                  type: string
+                callback:
+                  description: None
+                  type: string
+              required:
+              - byte
+              - double
+              - number
+              - pattern_without_delimiter
+        required: true
+      responses:
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      security:
+      - http_basic_test: []
+      summary: |-
+        Fake endpoint for testing various parameters
+         假端點
+         偽のエンドポイント
+         가짜 엔드 포인트
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/outer/number:
+    post:
+      description: Test serialization of outer number types
+      operationId: fakeOuterNumberSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterNumber'
+        description: Input number as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterNumber'
+          description: Output number
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/string:
+    post:
+      description: Test serialization of outer string types
+      operationId: fakeOuterStringSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterString'
+        description: Input string as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterString'
+          description: Output string
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/boolean:
+    post:
+      description: Test serialization of outer boolean types
+      operationId: fakeOuterBooleanSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterBoolean'
+        description: Input boolean as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterBoolean'
+          description: Output boolean
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/composite:
+    post:
+      description: Test serialization of object with outer number type
+      operationId: fakeOuterCompositeSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterComposite'
+        description: Input composite as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterComposite'
+          description: Output composite
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/jsonFormData:
+    get:
+      operationId: testJsonFormData
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                param:
+                  description: field1
+                  type: string
+                param2:
+                  description: field2
+                  type: string
+              required:
+              - param
+              - param2
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: test json serialization of form data
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/inline-additionalProperties:
+    post:
+      operationId: testInlineAdditionalProperties
+      requestBody:
+        content:
+          application/json:
+            schema:
+              additionalProperties:
+                type: string
+              type: object
+        description: request body
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: test inline additionalProperties
+      tags:
+      - fake
+      x-codegen-request-body-name: param
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/body-with-query-params:
+    put:
+      operationId: testBodyWithQueryParams
+      parameters:
+      - in: query
+        name: query
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/User'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/create_xml_item:
+    post:
+      description: this route creates an XmlItem
+      operationId: createXmlItem
+      requestBody:
+        content:
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          application/xml; charset=utf-8:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          application/xml; charset=utf-16:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml; charset=utf-8:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml; charset=utf-16:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+        description: XmlItem Body
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: creates an XmlItem
+      tags:
+      - fake
+      x-codegen-request-body-name: XmlItem
+      x-contentType: application/xml
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /another-fake/dummy:
+    patch:
+      description: To test special tags and operation ID starting with number
+      operationId: 123_test_@#$%_special_tags
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      summary: To test special tags
+      tags:
+      - $another-fake?
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: $another-fake?
+  /fake/body-with-file-schema:
+    put:
+      description: For this test, the body for this request much reference a schema
+        named `File`.
+      operationId: testBodyWithFileSchema
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/FileSchemaTestClass'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/test-query-parameters:
+    put:
+      description: To test the collection format in query parameters
+      operationId: testQueryParameterCollectionFormat
+      parameters:
+      - explode: false
+        in: query
+        name: pipe
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - in: query
+        name: ioutil
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+      - in: query
+        name: http
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: spaceDelimited
+      - explode: false
+        in: query
+        name: url
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - explode: true
+        in: query
+        name: context
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/{petId}/uploadImageWithRequiredFile:
+    post:
+      operationId: uploadFileWithRequiredFile
+      parameters:
+      - description: ID of pet to update
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                additionalMetadata:
+                  description: Additional data to pass to server
+                  type: string
+                requiredFile:
+                  description: file to upload
+                  format: binary
+                  type: string
+              required:
+              - requiredFile
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiResponse'
+          description: successful operation
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: uploads an image (required)
+      tags:
+      - pet
+      x-contentType: multipart/form-data
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+components:
+  schemas:
+    Order:
+      example:
+        petId: 6
+        quantity: 1
+        id: 0
+        shipDate: 2000-01-23T04:56:07.000+00:00
+        complete: false
+        status: placed
+      properties:
+        id:
+          format: int64
+          type: integer
+        petId:
+          format: int64
+          type: integer
+        quantity:
+          format: int32
+          type: integer
+        shipDate:
+          format: date-time
+          type: string
+        status:
+          description: Order Status
+          enum:
+          - placed
+          - approved
+          - delivered
+          type: string
+        complete:
+          default: false
+          type: boolean
+      type: object
+      xml:
+        name: Order
+    Category:
+      example:
+        name: default-name
+        id: 6
+      properties:
+        id:
+          format: int64
+          type: integer
+        name:
+          default: default-name
+          type: string
+      required:
+      - name
+      type: object
+      xml:
+        name: Category
+    User:
+      example:
+        firstName: firstName
+        lastName: lastName
+        password: password
+        userStatus: 6
+        phone: phone
+        id: 0
+        email: email
+        username: username
+      properties:
+        id:
+          format: int64
+          type: integer
+          x-is-unique: true
+        username:
+          type: string
+        firstName:
+          type: string
+        lastName:
+          type: string
+        email:
+          type: string
+        password:
+          type: string
+        phone:
+          type: string
+        userStatus:
+          description: User Status
+          format: int32
+          type: integer
+      type: object
+      xml:
+        name: User
+    Tag:
+      example:
+        name: name
+        id: 1
+      properties:
+        id:
+          format: int64
+          type: integer
+        name:
+          type: string
+      type: object
+      xml:
+        name: Tag
+    Pet:
+      example:
+        photoUrls:
+        - photoUrls
+        - photoUrls
+        name: doggie
+        id: 0
+        category:
+          name: default-name
+          id: 6
+        tags:
+        - name: name
+          id: 1
+        - name: name
+          id: 1
+        status: available
+      properties:
+        id:
+          format: int64
+          type: integer
+          x-is-unique: true
+        category:
+          $ref: '#/components/schemas/Category'
+        name:
+          example: doggie
+          type: string
+        photoUrls:
+          items:
+            type: string
+          type: array
+          uniqueItems: true
+          xml:
+            name: photoUrl
+            wrapped: true
+        tags:
+          items:
+            $ref: '#/components/schemas/Tag'
+          type: array
+          xml:
+            name: tag
+            wrapped: true
+        status:
+          description: pet status in the store
+          enum:
+          - available
+          - pending
+          - sold
+          type: string
+      required:
+      - name
+      - photoUrls
+      type: object
+      xml:
+        name: Pet
+    ApiResponse:
+      example:
+        code: 0
+        type: type
+        message: message
+      properties:
+        code:
+          format: int32
+          type: integer
+        type:
+          type: string
+        message:
+          type: string
+      type: object
+    $special[model.name]:
+      properties:
+        $special[property.name]:
+          format: int64
+          type: integer
+      type: object
+      xml:
+        name: $special[model.name]
+    Return:
+      description: Model for testing reserved words
+      properties:
+        return:
+          format: int32
+          type: integer
+      type: object
+      xml:
+        name: Return
+    Name:
+      description: Model for testing model name same as property name
+      properties:
+        name:
+          format: int32
+          type: integer
+        snake_case:
+          format: int32
+          readOnly: true
+          type: integer
+        property:
+          type: string
+        "123Number":
+          readOnly: true
+          type: integer
+      required:
+      - name
+      type: object
+      xml:
+        name: Name
+    "200_response":
+      description: Model for testing model name starting with number
+      properties:
+        name:
+          format: int32
+          type: integer
+        class:
+          type: string
+      type: object
+      xml:
+        name: Name
+    ClassModel:
+      description: Model for testing model with "_class" property
+      properties:
+        _class:
+          type: string
+      type: object
+    Dog:
+      allOf:
+      - $ref: '#/components/schemas/Animal'
+      - $ref: '#/components/schemas/Dog_allOf'
+    Cat:
+      allOf:
+      - $ref: '#/components/schemas/Animal'
+      - $ref: '#/components/schemas/Cat_allOf'
+    BigCat:
+      allOf:
+      - $ref: '#/components/schemas/Cat'
+      - $ref: '#/components/schemas/BigCat_allOf'
+    Animal:
+      discriminator:
+        propertyName: className
+      properties:
+        className:
+          type: string
+        color:
+          default: red
+          type: string
+      required:
+      - className
+      type: object
+    AnimalFarm:
+      items:
+        $ref: '#/components/schemas/Animal'
+      type: array
+    format_test:
+      properties:
+        integer:
+          maximum: 1E+2
+          minimum: 1E+1
+          type: integer
+        int32:
+          format: int32
+          maximum: 2E+2
+          minimum: 2E+1
+          type: integer
+        int64:
+          format: int64
+          type: integer
+        number:
+          maximum: 543.2
+          minimum: 32.1
+          type: number
+        float:
+          format: float
+          maximum: 987.6
+          minimum: 54.3
+          type: number
+        double:
+          format: double
+          maximum: 123.4
+          minimum: 67.8
+          type: number
+        string:
+          pattern: /[a-z]/i
+          type: string
+        byte:
+          format: byte
+          pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
+          type: string
+        binary:
+          format: binary
+          type: string
+        date:
+          format: date
+          type: string
+        dateTime:
+          format: date-time
+          type: string
+        uuid:
+          example: 72f98069-206d-4f12-9f12-3d1e525a8e84
+          format: uuid
+          type: string
+        password:
+          format: password
+          maxLength: 64
+          minLength: 10
+          type: string
+        BigDecimal:
+          format: number
+          type: string
+      required:
+      - byte
+      - date
+      - number
+      - password
+      type: object
+    EnumClass:
+      default: -efg
+      enum:
+      - _abc
+      - -efg
+      - (xyz)
+      type: string
+    Enum_Test:
+      properties:
+        enum_string:
+          enum:
+          - UPPER
+          - lower
+          - ""
+          type: string
+        enum_string_required:
+          enum:
+          - UPPER
+          - lower
+          - ""
+          type: string
+        enum_integer:
+          enum:
+          - 1
+          - -1
+          format: int32
+          type: integer
+        enum_number:
+          enum:
+          - 1.1
+          - -1.2
+          format: double
+          type: number
+        outerEnum:
+          $ref: '#/components/schemas/OuterEnum'
+      required:
+      - enum_string_required
+      type: object
+    AdditionalPropertiesClass:
+      properties:
+        map_string:
+          additionalProperties:
+            type: string
+          type: object
+        map_number:
+          additionalProperties:
+            type: number
+          type: object
+        map_integer:
+          additionalProperties:
+            type: integer
+          type: object
+        map_boolean:
+          additionalProperties:
+            type: boolean
+          type: object
+        map_array_integer:
+          additionalProperties:
+            items:
+              type: integer
+            type: array
+          type: object
+        map_array_anytype:
+          additionalProperties:
+            items:
+              properties: {}
+              type: object
+            type: array
+          type: object
+        map_map_string:
+          additionalProperties:
+            additionalProperties:
+              type: string
+            type: object
+          type: object
+        map_map_anytype:
+          additionalProperties:
+            additionalProperties:
+              properties: {}
+              type: object
+            type: object
+          type: object
+        anytype_1:
+          properties: {}
+          type: object
+        anytype_2:
+          type: object
+        anytype_3:
+          properties: {}
+          type: object
+      type: object
+    AdditionalPropertiesString:
+      additionalProperties:
+        type: string
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesInteger:
+      additionalProperties:
+        type: integer
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesNumber:
+      additionalProperties:
+        type: number
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesBoolean:
+      additionalProperties:
+        type: boolean
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesArray:
+      additionalProperties:
+        items:
+          properties: {}
+          type: object
+        type: array
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesObject:
+      additionalProperties:
+        additionalProperties:
+          properties: {}
+          type: object
+        type: object
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesAnyType:
+      additionalProperties:
+        properties: {}
+        type: object
+      properties:
+        name:
+          type: string
+      type: object
+    MixedPropertiesAndAdditionalPropertiesClass:
+      properties:
+        uuid:
+          format: uuid
+          type: string
+        dateTime:
+          format: date-time
+          type: string
+        map:
+          additionalProperties:
+            $ref: '#/components/schemas/Animal'
+          type: object
+      type: object
+    List:
+      properties:
+        "123-list":
+          type: string
+      type: object
+    Client:
+      example:
+        client: client
+      properties:
+        client:
+          type: string
+      type: object
+    ReadOnlyFirst:
+      properties:
+        bar:
+          readOnly: true
+          type: string
+        baz:
+          type: string
+      type: object
+    hasOnlyReadOnly:
+      properties:
+        bar:
+          readOnly: true
+          type: string
+        foo:
+          readOnly: true
+          type: string
+      type: object
+    Capitalization:
+      properties:
+        smallCamel:
+          type: string
+        CapitalCamel:
+          type: string
+        small_Snake:
+          type: string
+        Capital_Snake:
+          type: string
+        SCA_ETH_Flow_Points:
+          type: string
+        ATT_NAME:
+          description: |
+            Name of the pet
+          type: string
+      type: object
+    MapTest:
+      properties:
+        map_map_of_string:
+          additionalProperties:
+            additionalProperties:
+              type: string
+            type: object
+          type: object
+        map_of_enum_string:
+          additionalProperties:
+            enum:
+            - UPPER
+            - lower
+            type: string
+          type: object
+        direct_map:
+          additionalProperties:
+            type: boolean
+          type: object
+        indirect_map:
+          additionalProperties:
+            type: boolean
+          type: object
+      type: object
+    ArrayTest:
+      properties:
+        array_of_string:
+          items:
+            type: string
+          type: array
+        array_array_of_integer:
+          items:
+            items:
+              format: int64
+              type: integer
+            type: array
+          type: array
+        array_array_of_model:
+          items:
+            items:
+              $ref: '#/components/schemas/ReadOnlyFirst'
+            type: array
+          type: array
+      type: object
+    NumberOnly:
+      properties:
+        JustNumber:
+          type: number
+      type: object
+    ArrayOfNumberOnly:
+      properties:
+        ArrayNumber:
+          items:
+            type: number
+          type: array
+      type: object
+    ArrayOfArrayOfNumberOnly:
+      properties:
+        ArrayArrayNumber:
+          items:
+            items:
+              type: number
+            type: array
+          type: array
+      type: object
+    EnumArrays:
+      properties:
+        just_symbol:
+          enum:
+          - '>='
+          - $
+          type: string
+        array_enum:
+          items:
+            enum:
+            - fish
+            - crab
+            type: string
+          type: array
+      type: object
+    OuterEnum:
+      enum:
+      - placed
+      - approved
+      - delivered
+      type: string
+    OuterComposite:
+      example:
+        my_string: my_string
+        my_number: 0.8008281904610115
+        my_boolean: true
+      properties:
+        my_number:
+          type: number
+        my_string:
+          type: string
+        my_boolean:
+          type: boolean
+          x-codegen-body-parameter-name: boolean_post_body
+      type: object
+    OuterNumber:
+      type: number
+    OuterString:
+      type: string
+    OuterBoolean:
+      type: boolean
+      x-codegen-body-parameter-name: boolean_post_body
+    StringBooleanMap:
+      additionalProperties:
+        type: boolean
+      type: object
+    FileSchemaTestClass:
+      example:
+        file:
+          sourceURI: sourceURI
+        files:
+        - sourceURI: sourceURI
+        - sourceURI: sourceURI
+      properties:
+        file:
+          $ref: '#/components/schemas/File'
+        files:
+          items:
+            $ref: '#/components/schemas/File'
+          type: array
+      type: object
+    File:
+      description: Must be named `File` for test.
+      example:
+        sourceURI: sourceURI
+      properties:
+        sourceURI:
+          description: Test capitalization
+          type: string
+      type: object
+    TypeHolderDefault:
+      properties:
+        string_item:
+          default: what
+          type: string
+        number_item:
+          type: number
+        integer_item:
+          type: integer
+        bool_item:
+          default: true
+          type: boolean
+        array_item:
+          items:
+            type: integer
+          type: array
+      required:
+      - array_item
+      - bool_item
+      - integer_item
+      - number_item
+      - string_item
+      type: object
+    TypeHolderExample:
+      properties:
+        string_item:
+          example: what
+          type: string
+        number_item:
+          example: 1.234
+          type: number
+        float_item:
+          example: 1.234
+          format: float
+          type: number
+        integer_item:
+          example: -2
+          type: integer
+        bool_item:
+          example: true
+          type: boolean
+        array_item:
+          example:
+          - 0
+          - 1
+          - 2
+          - 3
+          items:
+            type: integer
+          type: array
+      required:
+      - array_item
+      - bool_item
+      - float_item
+      - integer_item
+      - number_item
+      - string_item
+      type: object
+    XmlItem:
+      properties:
+        attribute_string:
+          example: string
+          type: string
+          xml:
+            attribute: true
+        attribute_number:
+          example: 1.234
+          type: number
+          xml:
+            attribute: true
+        attribute_integer:
+          example: -2
+          type: integer
+          xml:
+            attribute: true
+        attribute_boolean:
+          example: true
+          type: boolean
+          xml:
+            attribute: true
+        wrapped_array:
+          items:
+            type: integer
+          type: array
+          xml:
+            wrapped: true
+        name_string:
+          example: string
+          type: string
+          xml:
+            name: xml_name_string
+        name_number:
+          example: 1.234
+          type: number
+          xml:
+            name: xml_name_number
+        name_integer:
+          example: -2
+          type: integer
+          xml:
+            name: xml_name_integer
+        name_boolean:
+          example: true
+          type: boolean
+          xml:
+            name: xml_name_boolean
+        name_array:
+          items:
+            type: integer
+            xml:
+              name: xml_name_array_item
+          type: array
+        name_wrapped_array:
+          items:
+            type: integer
+            xml:
+              name: xml_name_wrapped_array_item
+          type: array
+          xml:
+            name: xml_name_wrapped_array
+            wrapped: true
+        prefix_string:
+          example: string
+          type: string
+          xml:
+            prefix: ab
+        prefix_number:
+          example: 1.234
+          type: number
+          xml:
+            prefix: cd
+        prefix_integer:
+          example: -2
+          type: integer
+          xml:
+            prefix: ef
+        prefix_boolean:
+          example: true
+          type: boolean
+          xml:
+            prefix: gh
+        prefix_array:
+          items:
+            type: integer
+            xml:
+              prefix: ij
+          type: array
+        prefix_wrapped_array:
+          items:
+            type: integer
+            xml:
+              prefix: mn
+          type: array
+          xml:
+            prefix: kl
+            wrapped: true
+        namespace_string:
+          example: string
+          type: string
+          xml:
+            namespace: http://a.com/schema
+        namespace_number:
+          example: 1.234
+          type: number
+          xml:
+            namespace: http://b.com/schema
+        namespace_integer:
+          example: -2
+          type: integer
+          xml:
+            namespace: http://c.com/schema
+        namespace_boolean:
+          example: true
+          type: boolean
+          xml:
+            namespace: http://d.com/schema
+        namespace_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://e.com/schema
+          type: array
+        namespace_wrapped_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://g.com/schema
+          type: array
+          xml:
+            namespace: http://f.com/schema
+            wrapped: true
+        prefix_ns_string:
+          example: string
+          type: string
+          xml:
+            namespace: http://a.com/schema
+            prefix: a
+        prefix_ns_number:
+          example: 1.234
+          type: number
+          xml:
+            namespace: http://b.com/schema
+            prefix: b
+        prefix_ns_integer:
+          example: -2
+          type: integer
+          xml:
+            namespace: http://c.com/schema
+            prefix: c
+        prefix_ns_boolean:
+          example: true
+          type: boolean
+          xml:
+            namespace: http://d.com/schema
+            prefix: d
+        prefix_ns_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://e.com/schema
+              prefix: e
+          type: array
+        prefix_ns_wrapped_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://g.com/schema
+              prefix: g
+          type: array
+          xml:
+            namespace: http://f.com/schema
+            prefix: f
+            wrapped: true
+      type: object
+      xml:
+        namespace: http://a.com/schema
+        prefix: pre
+    Dog_allOf:
+      properties:
+        breed:
+          type: string
+      type: object
+    Cat_allOf:
+      properties:
+        declawed:
+          type: boolean
+      type: object
+    BigCat_allOf:
+      properties:
+        kind:
+          enum:
+          - lions
+          - tigers
+          - leopards
+          - jaguars
+          type: string
+      type: object
+  securitySchemes:
+    petstore_auth:
+      flows:
+        implicit:
+          authorizationUrl: http://petstore.swagger.io/api/oauth/dialog
+          scopes:
+            write:pets: modify pets in your account
+            read:pets: read your pets
+      type: oauth2
+    api_key:
+      in: header
+      name: api_key
+      type: apiKey
+    api_key_query:
+      in: query
+      name: api_key_query
+      type: apiKey
+    http_basic_test:
+      scheme: basic
+      type: http
+x-original-swagger-version: "2.0"
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/.openapi-generator-ignore b/samples/openapi3/server/petstore/springboot-implicitHeaders/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/.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/openapi3/server/petstore/springboot-implicitHeaders/.openapi-generator/FILES b/samples/openapi3/server/petstore/springboot-implicitHeaders/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..e4c32719b541ab37b408dd5bd08d6eb41609d79d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/.openapi-generator/FILES
@@ -0,0 +1,66 @@
+README.md
+pom.xml
+src/main/java/org/openapitools/OpenAPI2SpringBoot.java
+src/main/java/org/openapitools/RFC3339DateFormat.java
+src/main/java/org/openapitools/api/AnotherFakeApi.java
+src/main/java/org/openapitools/api/AnotherFakeApiController.java
+src/main/java/org/openapitools/api/ApiUtil.java
+src/main/java/org/openapitools/api/FakeApi.java
+src/main/java/org/openapitools/api/FakeApiController.java
+src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
+src/main/java/org/openapitools/api/PetApi.java
+src/main/java/org/openapitools/api/PetApiController.java
+src/main/java/org/openapitools/api/StoreApi.java
+src/main/java/org/openapitools/api/StoreApiController.java
+src/main/java/org/openapitools/api/UserApi.java
+src/main/java/org/openapitools/api/UserApiController.java
+src/main/java/org/openapitools/configuration/HomeController.java
+src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
+src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
+src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
+src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
+src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
+src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
+src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
+src/main/java/org/openapitools/model/AdditionalPropertiesString.java
+src/main/java/org/openapitools/model/Animal.java
+src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
+src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
+src/main/java/org/openapitools/model/ArrayTest.java
+src/main/java/org/openapitools/model/BigCat.java
+src/main/java/org/openapitools/model/BigCatAllOf.java
+src/main/java/org/openapitools/model/Capitalization.java
+src/main/java/org/openapitools/model/Cat.java
+src/main/java/org/openapitools/model/CatAllOf.java
+src/main/java/org/openapitools/model/Category.java
+src/main/java/org/openapitools/model/ClassModel.java
+src/main/java/org/openapitools/model/Client.java
+src/main/java/org/openapitools/model/Dog.java
+src/main/java/org/openapitools/model/DogAllOf.java
+src/main/java/org/openapitools/model/EnumArrays.java
+src/main/java/org/openapitools/model/EnumClass.java
+src/main/java/org/openapitools/model/EnumTest.java
+src/main/java/org/openapitools/model/FileSchemaTestClass.java
+src/main/java/org/openapitools/model/FormatTest.java
+src/main/java/org/openapitools/model/HasOnlyReadOnly.java
+src/main/java/org/openapitools/model/MapTest.java
+src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
+src/main/java/org/openapitools/model/Model200Response.java
+src/main/java/org/openapitools/model/ModelApiResponse.java
+src/main/java/org/openapitools/model/ModelReturn.java
+src/main/java/org/openapitools/model/Name.java
+src/main/java/org/openapitools/model/NumberOnly.java
+src/main/java/org/openapitools/model/Order.java
+src/main/java/org/openapitools/model/OuterComposite.java
+src/main/java/org/openapitools/model/OuterEnum.java
+src/main/java/org/openapitools/model/Pet.java
+src/main/java/org/openapitools/model/ReadOnlyFirst.java
+src/main/java/org/openapitools/model/SpecialModelName.java
+src/main/java/org/openapitools/model/Tag.java
+src/main/java/org/openapitools/model/TypeHolderDefault.java
+src/main/java/org/openapitools/model/TypeHolderExample.java
+src/main/java/org/openapitools/model/User.java
+src/main/java/org/openapitools/model/XmlItem.java
+src/main/resources/application.properties
+src/main/resources/openapi.yaml
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION b/samples/openapi3/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..0984c4c1ad213d3a352049ad557efc9bd5140752
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/README.md b/samples/openapi3/server/petstore/springboot-implicitHeaders/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..befc961488ae17cb2251c0931e29378526fd41ce
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/README.md
@@ -0,0 +1,16 @@
+# OpenAPI generated server
+
+Spring Boot Server
+
+
+## Overview
+This server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
+By using the [OpenAPI-Spec](https://openapis.org), you can easily generate a server stub.
+This is an example of building a OpenAPI-enabled server in Java using the SpringBoot framework.
+
+Start your server as a simple java application
+
+You can view the api documentation in swagger-ui by pointing to
+http://localhost:80/
+
+Change default port value in application.properties
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/pom.xml b/samples/openapi3/server/petstore/springboot-implicitHeaders/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1034cd0499da31c67484e7b8eba4d066632a4534
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/pom.xml
@@ -0,0 +1,71 @@
+<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.openapi3</groupId>
+    <artifactId>springboot-implicitHeaders</artifactId>
+    <packaging>jar</packaging>
+    <name>springboot-implicitHeaders</name>
+    <version>1.0.0</version>
+    <properties>
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>2.1.11</swagger-core-version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.5.8</version>
+    </parent>
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>${swagger-core-version}</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.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>0.2.2</version>
+        </dependency>
+        <!-- Bean Validation API support -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/OpenAPI2SpringBoot.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/OpenAPI2SpringBoot.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb088f4519352303a48b18ebbdd5ed9a0003ed73
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/OpenAPI2SpringBoot.java
@@ -0,0 +1,63 @@
+package org.openapitools;
+
+import com.fasterxml.jackson.databind.Module;
+import org.openapitools.jackson.nullable.JsonNullableModule;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.ExitCodeGenerator;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@SpringBootApplication
+@ComponentScan(basePackages = {"org.openapitools", "org.openapitools.api" , "org.openapitools.configuration"})
+public class OpenAPI2SpringBoot implements CommandLineRunner {
+
+    @Override
+    public void run(String... arg0) throws Exception {
+        if (arg0.length > 0 && arg0[0].equals("exitcode")) {
+            throw new ExitException();
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        new SpringApplication(OpenAPI2SpringBoot.class).run(args);
+    }
+
+    static class ExitException extends RuntimeException implements ExitCodeGenerator {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public int getExitCode() {
+            return 10;
+        }
+
+    }
+
+    @Bean
+    public WebMvcConfigurer webConfigurer() {
+        return new WebMvcConfigurer() {
+            /*@Override
+            public void addCorsMappings(CorsRegistry registry) {
+                registry.addMapping("/**")
+                        .allowedOrigins("*")
+                        .allowedMethods("*")
+                        .allowedHeaders("Content-Type");
+            }*/
+
+            @Override
+            public void addResourceHandlers(ResourceHandlerRegistry registry) {
+                registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/3.14.2/");
+            }
+        };
+    }
+
+    @Bean
+    public Module jsonNullableModule() {
+        return new JsonNullableModule();
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/RFC3339DateFormat.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/RFC3339DateFormat.java
new file mode 100644
index 0000000000000000000000000000000000000000..bcd3936d8b343ef7553782b552e9798b69bc5a02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/RFC3339DateFormat.java
@@ -0,0 +1,38 @@
+package org.openapitools;
+
+import com.fasterxml.jackson.databind.util.StdDateFormat;
+
+import java.text.DateFormat;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+public class RFC3339DateFormat extends DateFormat {
+  private static final long serialVersionUID = 1L;
+  private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC");
+
+  private final StdDateFormat fmt = new StdDateFormat()
+          .withTimeZone(TIMEZONE_Z)
+          .withColonInTimeZone(true);
+
+  public RFC3339DateFormat() {
+    this.calendar = new GregorianCalendar();
+  }
+
+  @Override
+  public Date parse(String source, ParsePosition pos) {
+    return fmt.parse(source, pos);
+  }
+
+  @Override
+  public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
+    return fmt.format(date, toAppendTo, fieldPosition);
+  }
+
+  @Override
+  public Object clone() {
+    return this;
+  }
+}
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..82a5df22e20e3e179df2a873c22d1512a8982293
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -0,0 +1,77 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "another-fake", description = "the another-fake API")
+public interface AnotherFakeApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * PATCH /another-fake/dummy : To test special tags
+     * To test special tags and operation ID starting with number
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test special tags",
+        tags = { "$another-fake?" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/another-fake/dummy",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Client> call123testSpecialTags(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"client\" : \"client\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApiController.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..d8efcca7f8a47705edb4afb6de4a3cc183f81e61
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class AnotherFakeApiController implements AnotherFakeApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public AnotherFakeApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/ApiUtil.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/ApiUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..1245b1dd0ccf3cae51824d69fe4074d9acb576df
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/ApiUtil.java
@@ -0,0 +1,19 @@
+package org.openapitools.api;
+
+import org.springframework.web.context.request.NativeWebRequest;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class ApiUtil {
+    public static void setExampleResponse(NativeWebRequest req, String contentType, String example) {
+        try {
+            HttpServletResponse res = req.getNativeResponse(HttpServletResponse.class);
+            res.setCharacterEncoding("UTF-8");
+            res.addHeader("Content-Type", contentType);
+            res.getWriter().print(example);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..456caa3cf66f271811f35fd2b538aad936007213
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java
@@ -0,0 +1,577 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.math.BigDecimal;
+import org.openapitools.model.Client;
+import org.openapitools.model.FileSchemaTestClass;
+import java.time.LocalDate;
+import java.util.Map;
+import org.openapitools.model.ModelApiResponse;
+import java.time.OffsetDateTime;
+import org.openapitools.model.OuterComposite;
+import org.openapitools.model.User;
+import org.openapitools.model.XmlItem;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "fake", description = "the fake API")
+public interface FakeApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /fake/create_xml_item : creates an XmlItem
+     * this route creates an XmlItem
+     *
+     * @param xmlItem XmlItem Body (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "creates an XmlItem",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/create_xml_item",
+        consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
+    )
+    default ResponseEntity<Void> createXmlItem(
+        @Parameter(name = "XmlItem", description = "XmlItem Body", required = true, schema = @Schema(description = "")) @Valid @RequestBody XmlItem xmlItem
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake/outer/boolean
+     * Test serialization of outer boolean types
+     *
+     * @param body Input boolean as post body (optional)
+     * @return Output boolean (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output boolean", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Boolean.class)))
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/boolean",
+        produces = { "*/*" }
+    )
+    default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
+        @Parameter(name = "body", description = "Input boolean as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) Boolean body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake/outer/composite
+     * Test serialization of object with outer number type
+     *
+     * @param body Input composite as post body (optional)
+     * @return Output composite (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output composite", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  OuterComposite.class)))
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/composite",
+        produces = { "*/*" }
+    )
+    default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
+        @Parameter(name = "body", description = "Input composite as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) OuterComposite body
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
+                    String exampleString = "{ \"my_string\" : \"my_string\", \"my_number\" : 0.8008281904610115, \"my_boolean\" : true }";
+                    ApiUtil.setExampleResponse(request, "*/*", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake/outer/number
+     * Test serialization of outer number types
+     *
+     * @param body Input number as post body (optional)
+     * @return Output number (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output number", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  BigDecimal.class)))
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/number",
+        produces = { "*/*" }
+    )
+    default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
+        @Parameter(name = "body", description = "Input number as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) BigDecimal body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake/outer/string
+     * Test serialization of outer string types
+     *
+     * @param body Input string as post body (optional)
+     * @return Output string (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output string", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class)))
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/string",
+        produces = { "*/*" }
+    )
+    default ResponseEntity<String> fakeOuterStringSerialize(
+        @Parameter(name = "body", description = "Input string as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) String body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PUT /fake/body-with-file-schema
+     * For this test, the body for this request much reference a schema named &#x60;File&#x60;.
+     *
+     * @param body  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/body-with-file-schema",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> testBodyWithFileSchema(
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody FileSchemaTestClass body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PUT /fake/body-with-query-params
+     *
+     * @param query  (required)
+     * @param body  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/body-with-query-params",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @Parameter(name = "query", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "query", required = true) String query,
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PATCH /fake : To test \&quot;client\&quot; model
+     * To test \&quot;client\&quot; model
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test \"client\" model",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/fake",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Client> testClientModel(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"client\" : \"client\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake : Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     * Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     *
+     * @param number None (required)
+     * @param _double None (required)
+     * @param patternWithoutDelimiter None (required)
+     * @param _byte None (required)
+     * @param integer None (optional)
+     * @param int32 None (optional)
+     * @param int64 None (optional)
+     * @param _float None (optional)
+     * @param string None (optional)
+     * @param binary None (optional)
+     * @param date None (optional)
+     * @param dateTime None (optional)
+     * @param password None (optional)
+     * @param paramCallback None (optional)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        },
+        security = {
+            @SecurityRequirement(name = "http_basic_test")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> testEndpointParameters(
+        @Parameter(name = "number", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @Parameter(name = "double", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @Parameter(name = "pattern_without_delimiter", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @Parameter(name = "byte", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @Parameter(name = "integer", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @Parameter(name = "int32", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @Parameter(name = "int64", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @Parameter(name = "float", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "float", required = false) Float _float,
+        @Parameter(name = "string", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "string", required = false) String string,
+        @Parameter(name = "binary", description = "None", schema = @Schema(description = "")) @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @Parameter(name = "date", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @Parameter(name = "dateTime", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @Parameter(name = "password", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "password", required = false) String password,
+        @Parameter(name = "callback", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /fake : To test enum parameters
+     * To test enum parameters
+     *
+     * @param enumQueryStringArray Query parameter enum test (string array) (optional)
+     * @param enumQueryString Query parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryInteger Query parameter enum test (double) (optional)
+     * @param enumQueryDouble Query parameter enum test (double) (optional)
+     * @param enumFormStringArray Form parameter enum test (string array) (optional, default to $)
+     * @param enumFormString Form parameter enum test (string) (optional, default to -efg)
+     * @return Invalid request (status code 400)
+     *         or Not found (status code 404)
+     */
+    @Operation(
+        summary = "To test enum parameters",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid request"),
+            @ApiResponse(responseCode = "404", description = "Not found")
+        }
+    )
+    @Parameters({
+        @Parameter(name = "enum_header_string_array", description = "Header parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })),
+        @Parameter(name = "enum_header_string", description = "Header parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg"))
+    })
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/fake",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> testEnumParameters(
+        @Parameter(name = "enum_query_string_array", description = "Query parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @Parameter(name = "enum_query_string", description = "Query parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @Parameter(name = "enum_query_integer", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1", "-2" })) @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @Parameter(name = "enum_query_double", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1.1", "-1.2" })) @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @Parameter(name = "enum_form_string_array", description = "Form parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @Parameter(name = "enum_form_string", description = "Form parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * DELETE /fake : Fake endpoint to test group parameters (optional)
+     * Fake endpoint to test group parameters (optional)
+     *
+     * @param requiredStringGroup Required String in group parameters (required)
+     * @param requiredInt64Group Required Integer in group parameters (required)
+     * @param stringGroup String in group parameters (optional)
+     * @param int64Group Integer in group parameters (optional)
+     * @return Someting wrong (status code 400)
+     */
+    @Operation(
+        summary = "Fake endpoint to test group parameters (optional)",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Someting wrong")
+        }
+    )
+    @Parameters({
+        @Parameter(name = "required_boolean_group", description = "Required Boolean in group parameters", required = true, schema = @Schema(description = "")),
+        @Parameter(name = "boolean_group", description = "Boolean in group parameters", schema = @Schema(description = ""))
+    })
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/fake"
+    )
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @Parameter(name = "required_string_group", description = "Required String in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @NotNull @Parameter(name = "required_int64_group", description = "Required Integer in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @Parameter(name = "string_group", description = "String in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @Parameter(name = "int64_group", description = "Integer in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake/inline-additionalProperties : test inline additionalProperties
+     *
+     * @param param request body (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "test inline additionalProperties",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/inline-additionalProperties",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> testInlineAdditionalProperties(
+        @Parameter(name = "param", description = "request body", required = true, schema = @Schema(description = "")) @Valid @RequestBody Map<String, String> param
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /fake/jsonFormData : test json serialization of form data
+     *
+     * @param param field1 (required)
+     * @param param2 field2 (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "test json serialization of form data",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/fake/jsonFormData",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> testJsonFormData(
+        @Parameter(name = "param", description = "field1", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "param", required = true) String param,
+        @Parameter(name = "param2", description = "field2", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PUT /fake/test-query-parameters
+     * To test the collection format in query parameters
+     *
+     * @param pipe  (required)
+     * @param ioutil  (required)
+     * @param http  (required)
+     * @param url  (required)
+     * @param context  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/test-query-parameters"
+    )
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @Parameter(name = "pipe", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @Parameter(name = "ioutil", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @Parameter(name = "http", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @Parameter(name = "url", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @Parameter(name = "context", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake/{petId}/uploadImageWithRequiredFile : uploads an image (required)
+     *
+     * @param petId ID of pet to update (required)
+     * @param requiredFile file to upload (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image (required)",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/{petId}/uploadImageWithRequiredFile",
+        produces = { "application/json" },
+        consumes = { "multipart/form-data" }
+    )
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "requiredFile", description = "file to upload", required = true, schema = @Schema(description = "")) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApiController.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..c4b88419aabe82748c213c6b507f1928dfb6faef
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class FakeApiController implements FakeApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public FakeApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..8f1db4a3481002eefc4e26049af13f66b2a8832e
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -0,0 +1,80 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "fake_classname_test", description = "the fake_classname_test API")
+public interface FakeClassnameTestApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * PATCH /fake_classname_test : To test class name in snake case
+     * To test class name in snake case
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test class name in snake case",
+        tags = { "fake_classname_tags 123#$%^" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key_query")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/fake_classname_test",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Client> testClassname(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"client\" : \"client\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..85458b255da584706093aa2e19acad06c9209ee2
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class FakeClassnameTestApiController implements FakeClassnameTestApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public FakeClassnameTestApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..67abf9f8cb5ef0f1dd44d543ce9487da4ea79d43
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java
@@ -0,0 +1,370 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.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 java.util.Set;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "pet", description = "the pet API")
+public interface PetApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Add a new pet to the store",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet",
+        consumes = { "application/json", "application/xml" }
+    )
+    default ResponseEntity<Void> addPet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @return successful operation (status code 200)
+     *         or Invalid pet value (status code 400)
+     */
+    @Operation(
+        summary = "Deletes a pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "400", description = "Invalid pet value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @Parameters({
+        @Parameter(name = "api_key", description = "", schema = @Schema(description = ""))
+    })
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/pet/{petId}"
+    )
+    default ResponseEntity<Void> deletePet(
+        @Parameter(name = "petId", description = "Pet id to delete", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     */
+    @Operation(
+        summary = "Finds Pets by status",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid status value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByStatus",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<List<Pet>> findPetsByStatus(
+        @NotNull @Parameter(name = "status", description = "Status values that need to be considered for filter", required = true, schema = @Schema(description = "", allowableValues = { "available", "pending", "sold" })) @Valid @RequestParam(value = "status", required = true) List<String> status
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     */
+    @Operation(
+        summary = "Finds Pets by tags",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid tag value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByTags",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @Parameter(name = "tags", description = "Tags to filter by", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     */
+    @Operation(
+        summary = "Find pet by ID",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/{petId}",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Pet> getPetById(
+        @Parameter(name = "petId", description = "ID of pet to return", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     */
+    @Operation(
+        summary = "Update an existing pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found"),
+            @ApiResponse(responseCode = "405", description = "Validation exception")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/pet",
+        consumes = { "application/json", "application/xml" }
+    )
+    default ResponseEntity<Void> updatePet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Updates a pet in the store with form data",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> updatePetWithForm(
+        @Parameter(name = "petId", description = "ID of pet that needs to be updated", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "name", description = "Updated name of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "name", required = false) String name,
+        @Parameter(name = "status", description = "Updated status of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "status", required = false) String status
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}/uploadImage",
+        produces = { "application/json" },
+        consumes = { "multipart/form-data" }
+    )
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @Parameter(name = "file", description = "file to upload", schema = @Schema(description = "")) @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApiController.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..e72c57e3cbec85aac1882dc1faac9beb651776b9
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class PetApiController implements PetApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public PetApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce360c31059f4ed3b25b136c614361aac9347001
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java
@@ -0,0 +1,191 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.Map;
+import org.openapitools.model.Order;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "store", description = "the store API")
+public interface StoreApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * DELETE /store/order/{order_id} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/store/order/{order_id}"
+    )
+    default ResponseEntity<Void> deleteOrder(
+        @Parameter(name = "order_id", description = "ID of the order that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("order_id") String orderId
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Returns pet inventories by status",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Map.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/inventory",
+        produces = { "application/json" }
+    )
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /store/order/{order_id} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Find purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/order/{order_id}",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @Parameter(name = "order_id", description = "ID of pet that needs to be fetched", required = true, schema = @Schema(description = "")) @PathVariable("order_id") Long orderId
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<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>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param body order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     */
+    @Operation(
+        summary = "Place an order for a pet",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid Order")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/store/order",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Order> placeOrder(
+        @Parameter(name = "body", description = "order placed for purchasing the pet", required = true, schema = @Schema(description = "")) @Valid @RequestBody Order body
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<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>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApiController.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..1293b5c8f6e4b7ac0041c3783a8add90811867ed
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class StoreApiController implements StoreApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public StoreApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f0113d6d1adde56c947a5d0aaca63abc75de6b4
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java
@@ -0,0 +1,288 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.List;
+import java.time.OffsetDateTime;
+import org.openapitools.model.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "user", description = "the user API")
+public interface UserApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param body Created user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Create user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user"
+    )
+    default ResponseEntity<Void> createUser(
+        @Parameter(name = "body", description = "Created user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithArray"
+    )
+    default ResponseEntity<Void> createUsersWithArrayInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithList"
+    )
+    default ResponseEntity<Void> createUsersWithListInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/user/{username}"
+    )
+    default ResponseEntity<Void> deleteUser(
+        @Parameter(name = "username", description = "The name that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Get user by user name",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  User.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/{username}",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<User> getUserByName(
+        @Parameter(name = "username", description = "The name that needs to be fetched. Use user1 for testing.", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"firstName\" : \"firstName\", \"lastName\" : \"lastName\", \"password\" : \"password\", \"userStatus\" : 6, \"phone\" : \"phone\", \"id\" : 0, \"email\" : \"email\", \"username\" : \"username\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<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>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     */
+    @Operation(
+        summary = "Logs user into the system",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username/password supplied")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/login",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<String> loginUser(
+        @NotNull @Parameter(name = "username", description = "The user name for login", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @Parameter(name = "password", description = "The password for login in clear text", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Logs out current logged in user session",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/logout"
+    )
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param body Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Updated user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid user supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @Parameters({
+    })
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/user/{username}"
+    )
+    default ResponseEntity<Void> updateUser(
+        @Parameter(name = "username", description = "name that need to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(name = "body", description = "Updated user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApiController.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f6c4d9a2d6f0625dd27d17ef813d5deb6cf51ae
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class UserApiController implements UserApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public UserApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/configuration/HomeController.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/configuration/HomeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..34bae16b8986820eef90212adb88e86fa2db0ea8
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/configuration/HomeController.java
@@ -0,0 +1,53 @@
+package org.openapitools.configuration;
+
+import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.io.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StreamUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+
+/**
+ * Home redirection to OpenAPI api documentation
+ */
+@Controller
+public class HomeController {
+
+    private static YAMLMapper yamlMapper = new YAMLMapper();
+
+    @Value("classpath:/openapi.yaml")
+    private Resource openapi;
+
+    @Bean
+    public String openapiContent() throws IOException {
+        try(InputStream is = openapi.getInputStream()) {
+            return StreamUtils.copyToString(is, Charset.defaultCharset());
+        }
+    }
+
+    @GetMapping(value = "/openapi.yaml", produces = "application/vnd.oai.openapi")
+    @ResponseBody
+    public String openapiYaml() throws IOException {
+        return openapiContent();
+    }
+
+    @GetMapping(value = "/openapi.json", produces = "application/json")
+    @ResponseBody
+    public Object openapiJson() throws IOException {
+        return yamlMapper.readValue(openapiContent(), Object.class);
+    }
+
+    @RequestMapping("/")
+    public String index() {
+        return "redirect:swagger-ui/index.html?url=../openapi.json";
+    }
+
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c57ae7dd14cea1acd9607d0e392dd2c79257878
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesAnyType
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesAnyType extends HashMap<String, Object>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesAnyType name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesAnyType additionalPropertiesAnyType = (AdditionalPropertiesAnyType) o;
+    return Objects.equals(this.name, additionalPropertiesAnyType.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesAnyType {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5285ec2f29bb31bba95fcaef6e06e815e1101b7
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
@@ -0,0 +1,87 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesArray
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesArray extends HashMap<String, List>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesArray name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesArray additionalPropertiesArray = (AdditionalPropertiesArray) o;
+    return Objects.equals(this.name, additionalPropertiesArray.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesArray {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8ca38c286d5ac22136574721e512776c68b780d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesBoolean
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesBoolean extends HashMap<String, Boolean>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesBoolean name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesBoolean additionalPropertiesBoolean = (AdditionalPropertiesBoolean) o;
+    return Objects.equals(this.name, additionalPropertiesBoolean.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesBoolean {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfd28ccb99637972f69d4653e63a17496210d34b
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
@@ -0,0 +1,414 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesClass   {
+  @JsonProperty("map_string")
+  @Valid
+  private Map<String, String> mapString = null;
+
+  @JsonProperty("map_number")
+  @Valid
+  private Map<String, BigDecimal> mapNumber = null;
+
+  @JsonProperty("map_integer")
+  @Valid
+  private Map<String, Integer> mapInteger = null;
+
+  @JsonProperty("map_boolean")
+  @Valid
+  private Map<String, Boolean> mapBoolean = null;
+
+  @JsonProperty("map_array_integer")
+  @Valid
+  private Map<String, List<Integer>> mapArrayInteger = null;
+
+  @JsonProperty("map_array_anytype")
+  @Valid
+  private Map<String, List<Object>> mapArrayAnytype = null;
+
+  @JsonProperty("map_map_string")
+  @Valid
+  private Map<String, Map<String, String>> mapMapString = null;
+
+  @JsonProperty("map_map_anytype")
+  @Valid
+  private Map<String, Map<String, Object>> mapMapAnytype = null;
+
+  @JsonProperty("anytype_1")
+  private Object anytype1;
+
+  @JsonProperty("anytype_2")
+  private Object anytype2;
+
+  @JsonProperty("anytype_3")
+  private Object anytype3;
+
+  public AdditionalPropertiesClass mapString(Map<String, String> mapString) {
+    this.mapString = mapString;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapStringItem(String key, String mapStringItem) {
+    if (this.mapString == null) {
+      this.mapString = new HashMap<>();
+    }
+    this.mapString.put(key, mapStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapString
+   * @return mapString
+  */
+  @Schema(name = "mapString", defaultValue = "")
+
+
+  public Map<String, String> getMapString() {
+    return mapString;
+  }
+
+  public void setMapString(Map<String, String> mapString) {
+    this.mapString = mapString;
+  }
+
+  public AdditionalPropertiesClass mapNumber(Map<String, BigDecimal> mapNumber) {
+    this.mapNumber = mapNumber;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapNumberItem(String key, BigDecimal mapNumberItem) {
+    if (this.mapNumber == null) {
+      this.mapNumber = new HashMap<>();
+    }
+    this.mapNumber.put(key, mapNumberItem);
+    return this;
+  }
+
+  /**
+   * Get mapNumber
+   * @return mapNumber
+  */
+  @Schema(name = "mapNumber", defaultValue = "")
+
+  @Valid
+
+  public Map<String, BigDecimal> getMapNumber() {
+    return mapNumber;
+  }
+
+  public void setMapNumber(Map<String, BigDecimal> mapNumber) {
+    this.mapNumber = mapNumber;
+  }
+
+  public AdditionalPropertiesClass mapInteger(Map<String, Integer> mapInteger) {
+    this.mapInteger = mapInteger;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapIntegerItem(String key, Integer mapIntegerItem) {
+    if (this.mapInteger == null) {
+      this.mapInteger = new HashMap<>();
+    }
+    this.mapInteger.put(key, mapIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get mapInteger
+   * @return mapInteger
+  */
+  @Schema(name = "mapInteger", defaultValue = "")
+
+
+  public Map<String, Integer> getMapInteger() {
+    return mapInteger;
+  }
+
+  public void setMapInteger(Map<String, Integer> mapInteger) {
+    this.mapInteger = mapInteger;
+  }
+
+  public AdditionalPropertiesClass mapBoolean(Map<String, Boolean> mapBoolean) {
+    this.mapBoolean = mapBoolean;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapBooleanItem(String key, Boolean mapBooleanItem) {
+    if (this.mapBoolean == null) {
+      this.mapBoolean = new HashMap<>();
+    }
+    this.mapBoolean.put(key, mapBooleanItem);
+    return this;
+  }
+
+  /**
+   * Get mapBoolean
+   * @return mapBoolean
+  */
+  @Schema(name = "mapBoolean", defaultValue = "")
+
+
+  public Map<String, Boolean> getMapBoolean() {
+    return mapBoolean;
+  }
+
+  public void setMapBoolean(Map<String, Boolean> mapBoolean) {
+    this.mapBoolean = mapBoolean;
+  }
+
+  public AdditionalPropertiesClass mapArrayInteger(Map<String, List<Integer>> mapArrayInteger) {
+    this.mapArrayInteger = mapArrayInteger;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapArrayIntegerItem(String key, List<Integer> mapArrayIntegerItem) {
+    if (this.mapArrayInteger == null) {
+      this.mapArrayInteger = new HashMap<>();
+    }
+    this.mapArrayInteger.put(key, mapArrayIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get mapArrayInteger
+   * @return mapArrayInteger
+  */
+  @Schema(name = "mapArrayInteger", defaultValue = "")
+
+  @Valid
+
+  public Map<String, List<Integer>> getMapArrayInteger() {
+    return mapArrayInteger;
+  }
+
+  public void setMapArrayInteger(Map<String, List<Integer>> mapArrayInteger) {
+    this.mapArrayInteger = mapArrayInteger;
+  }
+
+  public AdditionalPropertiesClass mapArrayAnytype(Map<String, List<Object>> mapArrayAnytype) {
+    this.mapArrayAnytype = mapArrayAnytype;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapArrayAnytypeItem(String key, List<Object> mapArrayAnytypeItem) {
+    if (this.mapArrayAnytype == null) {
+      this.mapArrayAnytype = new HashMap<>();
+    }
+    this.mapArrayAnytype.put(key, mapArrayAnytypeItem);
+    return this;
+  }
+
+  /**
+   * Get mapArrayAnytype
+   * @return mapArrayAnytype
+  */
+  @Schema(name = "mapArrayAnytype", defaultValue = "")
+
+  @Valid
+
+  public Map<String, List<Object>> getMapArrayAnytype() {
+    return mapArrayAnytype;
+  }
+
+  public void setMapArrayAnytype(Map<String, List<Object>> mapArrayAnytype) {
+    this.mapArrayAnytype = mapArrayAnytype;
+  }
+
+  public AdditionalPropertiesClass mapMapString(Map<String, Map<String, String>> mapMapString) {
+    this.mapMapString = mapMapString;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapMapStringItem(String key, Map<String, String> mapMapStringItem) {
+    if (this.mapMapString == null) {
+      this.mapMapString = new HashMap<>();
+    }
+    this.mapMapString.put(key, mapMapStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapString
+   * @return mapMapString
+  */
+  @Schema(name = "mapMapString", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, String>> getMapMapString() {
+    return mapMapString;
+  }
+
+  public void setMapMapString(Map<String, Map<String, String>> mapMapString) {
+    this.mapMapString = mapMapString;
+  }
+
+  public AdditionalPropertiesClass mapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
+    this.mapMapAnytype = mapMapAnytype;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapMapAnytypeItem(String key, Map<String, Object> mapMapAnytypeItem) {
+    if (this.mapMapAnytype == null) {
+      this.mapMapAnytype = new HashMap<>();
+    }
+    this.mapMapAnytype.put(key, mapMapAnytypeItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapAnytype
+   * @return mapMapAnytype
+  */
+  @Schema(name = "mapMapAnytype", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, Object>> getMapMapAnytype() {
+    return mapMapAnytype;
+  }
+
+  public void setMapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
+    this.mapMapAnytype = mapMapAnytype;
+  }
+
+  public AdditionalPropertiesClass anytype1(Object anytype1) {
+    this.anytype1 = anytype1;
+    return this;
+  }
+
+  /**
+   * Get anytype1
+   * @return anytype1
+  */
+  @Schema(name = "anytype1", defaultValue = "")
+
+
+  public Object getAnytype1() {
+    return anytype1;
+  }
+
+  public void setAnytype1(Object anytype1) {
+    this.anytype1 = anytype1;
+  }
+
+  public AdditionalPropertiesClass anytype2(Object anytype2) {
+    this.anytype2 = anytype2;
+    return this;
+  }
+
+  /**
+   * Get anytype2
+   * @return anytype2
+  */
+  @Schema(name = "anytype2", defaultValue = "")
+
+
+  public Object getAnytype2() {
+    return anytype2;
+  }
+
+  public void setAnytype2(Object anytype2) {
+    this.anytype2 = anytype2;
+  }
+
+  public AdditionalPropertiesClass anytype3(Object anytype3) {
+    this.anytype3 = anytype3;
+    return this;
+  }
+
+  /**
+   * Get anytype3
+   * @return anytype3
+  */
+  @Schema(name = "anytype3", defaultValue = "")
+
+
+  public Object getAnytype3() {
+    return anytype3;
+  }
+
+  public void setAnytype3(Object anytype3) {
+    this.anytype3 = anytype3;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesClass additionalPropertiesClass = (AdditionalPropertiesClass) o;
+    return Objects.equals(this.mapString, additionalPropertiesClass.mapString) &&
+        Objects.equals(this.mapNumber, additionalPropertiesClass.mapNumber) &&
+        Objects.equals(this.mapInteger, additionalPropertiesClass.mapInteger) &&
+        Objects.equals(this.mapBoolean, additionalPropertiesClass.mapBoolean) &&
+        Objects.equals(this.mapArrayInteger, additionalPropertiesClass.mapArrayInteger) &&
+        Objects.equals(this.mapArrayAnytype, additionalPropertiesClass.mapArrayAnytype) &&
+        Objects.equals(this.mapMapString, additionalPropertiesClass.mapMapString) &&
+        Objects.equals(this.mapMapAnytype, additionalPropertiesClass.mapMapAnytype) &&
+        Objects.equals(this.anytype1, additionalPropertiesClass.anytype1) &&
+        Objects.equals(this.anytype2, additionalPropertiesClass.anytype2) &&
+        Objects.equals(this.anytype3, additionalPropertiesClass.anytype3);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(mapString, mapNumber, mapInteger, mapBoolean, mapArrayInteger, mapArrayAnytype, mapMapString, mapMapAnytype, anytype1, anytype2, anytype3);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesClass {\n");
+    
+    sb.append("    mapString: ").append(toIndentedString(mapString)).append("\n");
+    sb.append("    mapNumber: ").append(toIndentedString(mapNumber)).append("\n");
+    sb.append("    mapInteger: ").append(toIndentedString(mapInteger)).append("\n");
+    sb.append("    mapBoolean: ").append(toIndentedString(mapBoolean)).append("\n");
+    sb.append("    mapArrayInteger: ").append(toIndentedString(mapArrayInteger)).append("\n");
+    sb.append("    mapArrayAnytype: ").append(toIndentedString(mapArrayAnytype)).append("\n");
+    sb.append("    mapMapString: ").append(toIndentedString(mapMapString)).append("\n");
+    sb.append("    mapMapAnytype: ").append(toIndentedString(mapMapAnytype)).append("\n");
+    sb.append("    anytype1: ").append(toIndentedString(anytype1)).append("\n");
+    sb.append("    anytype2: ").append(toIndentedString(anytype2)).append("\n");
+    sb.append("    anytype3: ").append(toIndentedString(anytype3)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fea577ab44bc610a5b2f663c9424ca16e773b02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesInteger
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesInteger extends HashMap<String, Integer>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesInteger name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesInteger additionalPropertiesInteger = (AdditionalPropertiesInteger) o;
+    return Objects.equals(this.name, additionalPropertiesInteger.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesInteger {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6eee612a24fecb0da4e4e2cddb8c7d68ef42534
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
@@ -0,0 +1,87 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesNumber
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesNumber extends HashMap<String, BigDecimal>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesNumber name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesNumber additionalPropertiesNumber = (AdditionalPropertiesNumber) o;
+    return Objects.equals(this.name, additionalPropertiesNumber.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesNumber {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7116bd7572cef9114d1110e4f546295b5fb9b25
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesObject
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesObject extends HashMap<String, Map>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesObject name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesObject additionalPropertiesObject = (AdditionalPropertiesObject) o;
+    return Objects.equals(this.name, additionalPropertiesObject.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesObject {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesString.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2022be266fbf1947c18de4430af4faa605595f3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesString
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesString extends HashMap<String, String>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesString name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesString additionalPropertiesString = (AdditionalPropertiesString) o;
+    return Objects.equals(this.name, additionalPropertiesString.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesString {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Animal.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Animal.java
new file mode 100644
index 0000000000000000000000000000000000000000..6f096d5069edf4f60558ff11cd2b2f1902eda228
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Animal.java
@@ -0,0 +1,118 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Animal
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "className", visible = true)
+@JsonSubTypes({
+  @JsonSubTypes.Type(value = BigCat.class, name = "BigCat"),
+  @JsonSubTypes.Type(value = Cat.class, name = "Cat"),
+  @JsonSubTypes.Type(value = Dog.class, name = "Dog"),
+})
+
+public class Animal   {
+  @JsonProperty("className")
+  private String className;
+
+  @JsonProperty("color")
+  private String color = "red";
+
+  public Animal className(String className) {
+    this.className = className;
+    return this;
+  }
+
+  /**
+   * Get className
+   * @return className
+  */
+  @Schema(name = "className", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getClassName() {
+    return className;
+  }
+
+  public void setClassName(String className) {
+    this.className = className;
+  }
+
+  public Animal color(String color) {
+    this.color = color;
+    return this;
+  }
+
+  /**
+   * Get color
+   * @return color
+  */
+  @Schema(name = "color", defaultValue = "")
+
+
+  public String getColor() {
+    return color;
+  }
+
+  public void setColor(String color) {
+    this.color = color;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Animal animal = (Animal) o;
+    return Objects.equals(this.className, animal.className) &&
+        Objects.equals(this.color, animal.color);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(className, color);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Animal {\n");
+    
+    sb.append("    className: ").append(toIndentedString(className)).append("\n");
+    sb.append("    color: ").append(toIndentedString(color)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebe36ad761a9c112d97adf5f724aea0cfd556975
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
@@ -0,0 +1,96 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayOfArrayOfNumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfArrayOfNumberOnly   {
+  @JsonProperty("ArrayArrayNumber")
+  @Valid
+  private List<List<BigDecimal>> arrayArrayNumber = null;
+
+  public ArrayOfArrayOfNumberOnly arrayArrayNumber(List<List<BigDecimal>> arrayArrayNumber) {
+    this.arrayArrayNumber = arrayArrayNumber;
+    return this;
+  }
+
+  public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List<BigDecimal> arrayArrayNumberItem) {
+    if (this.arrayArrayNumber == null) {
+      this.arrayArrayNumber = new ArrayList<>();
+    }
+    this.arrayArrayNumber.add(arrayArrayNumberItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayNumber
+   * @return arrayArrayNumber
+  */
+  @Schema(name = "arrayArrayNumber", defaultValue = "")
+
+  @Valid
+
+  public List<List<BigDecimal>> getArrayArrayNumber() {
+    return arrayArrayNumber;
+  }
+
+  public void setArrayArrayNumber(List<List<BigDecimal>> arrayArrayNumber) {
+    this.arrayArrayNumber = arrayArrayNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayOfArrayOfNumberOnly arrayOfArrayOfNumberOnly = (ArrayOfArrayOfNumberOnly) o;
+    return Objects.equals(this.arrayArrayNumber, arrayOfArrayOfNumberOnly.arrayArrayNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayArrayNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayOfArrayOfNumberOnly {\n");
+    
+    sb.append("    arrayArrayNumber: ").append(toIndentedString(arrayArrayNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..8158dd44ab88aaf69dd18b4c136ff094d8e33b02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
@@ -0,0 +1,96 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayOfNumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfNumberOnly   {
+  @JsonProperty("ArrayNumber")
+  @Valid
+  private List<BigDecimal> arrayNumber = null;
+
+  public ArrayOfNumberOnly arrayNumber(List<BigDecimal> arrayNumber) {
+    this.arrayNumber = arrayNumber;
+    return this;
+  }
+
+  public ArrayOfNumberOnly addArrayNumberItem(BigDecimal arrayNumberItem) {
+    if (this.arrayNumber == null) {
+      this.arrayNumber = new ArrayList<>();
+    }
+    this.arrayNumber.add(arrayNumberItem);
+    return this;
+  }
+
+  /**
+   * Get arrayNumber
+   * @return arrayNumber
+  */
+  @Schema(name = "arrayNumber", defaultValue = "")
+
+  @Valid
+
+  public List<BigDecimal> getArrayNumber() {
+    return arrayNumber;
+  }
+
+  public void setArrayNumber(List<BigDecimal> arrayNumber) {
+    this.arrayNumber = arrayNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayOfNumberOnly arrayOfNumberOnly = (ArrayOfNumberOnly) o;
+    return Objects.equals(this.arrayNumber, arrayOfNumberOnly.arrayNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayOfNumberOnly {\n");
+    
+    sb.append("    arrayNumber: ").append(toIndentedString(arrayNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ArrayTest.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ArrayTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..420010561bcde88cb30eda512eb9fb4ca45779ac
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ArrayTest.java
@@ -0,0 +1,165 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.model.ReadOnlyFirst;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayTest   {
+  @JsonProperty("array_of_string")
+  @Valid
+  private List<String> arrayOfString = null;
+
+  @JsonProperty("array_array_of_integer")
+  @Valid
+  private List<List<Long>> arrayArrayOfInteger = null;
+
+  @JsonProperty("array_array_of_model")
+  @Valid
+  private List<List<ReadOnlyFirst>> arrayArrayOfModel = null;
+
+  public ArrayTest arrayOfString(List<String> arrayOfString) {
+    this.arrayOfString = arrayOfString;
+    return this;
+  }
+
+  public ArrayTest addArrayOfStringItem(String arrayOfStringItem) {
+    if (this.arrayOfString == null) {
+      this.arrayOfString = new ArrayList<>();
+    }
+    this.arrayOfString.add(arrayOfStringItem);
+    return this;
+  }
+
+  /**
+   * Get arrayOfString
+   * @return arrayOfString
+  */
+  @Schema(name = "arrayOfString", defaultValue = "")
+
+
+  public List<String> getArrayOfString() {
+    return arrayOfString;
+  }
+
+  public void setArrayOfString(List<String> arrayOfString) {
+    this.arrayOfString = arrayOfString;
+  }
+
+  public ArrayTest arrayArrayOfInteger(List<List<Long>> arrayArrayOfInteger) {
+    this.arrayArrayOfInteger = arrayArrayOfInteger;
+    return this;
+  }
+
+  public ArrayTest addArrayArrayOfIntegerItem(List<Long> arrayArrayOfIntegerItem) {
+    if (this.arrayArrayOfInteger == null) {
+      this.arrayArrayOfInteger = new ArrayList<>();
+    }
+    this.arrayArrayOfInteger.add(arrayArrayOfIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayOfInteger
+   * @return arrayArrayOfInteger
+  */
+  @Schema(name = "arrayArrayOfInteger", defaultValue = "")
+
+  @Valid
+
+  public List<List<Long>> getArrayArrayOfInteger() {
+    return arrayArrayOfInteger;
+  }
+
+  public void setArrayArrayOfInteger(List<List<Long>> arrayArrayOfInteger) {
+    this.arrayArrayOfInteger = arrayArrayOfInteger;
+  }
+
+  public ArrayTest arrayArrayOfModel(List<List<ReadOnlyFirst>> arrayArrayOfModel) {
+    this.arrayArrayOfModel = arrayArrayOfModel;
+    return this;
+  }
+
+  public ArrayTest addArrayArrayOfModelItem(List<ReadOnlyFirst> arrayArrayOfModelItem) {
+    if (this.arrayArrayOfModel == null) {
+      this.arrayArrayOfModel = new ArrayList<>();
+    }
+    this.arrayArrayOfModel.add(arrayArrayOfModelItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayOfModel
+   * @return arrayArrayOfModel
+  */
+  @Schema(name = "arrayArrayOfModel", defaultValue = "")
+
+  @Valid
+
+  public List<List<ReadOnlyFirst>> getArrayArrayOfModel() {
+    return arrayArrayOfModel;
+  }
+
+  public void setArrayArrayOfModel(List<List<ReadOnlyFirst>> arrayArrayOfModel) {
+    this.arrayArrayOfModel = arrayArrayOfModel;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayTest arrayTest = (ArrayTest) o;
+    return Objects.equals(this.arrayOfString, arrayTest.arrayOfString) &&
+        Objects.equals(this.arrayArrayOfInteger, arrayTest.arrayArrayOfInteger) &&
+        Objects.equals(this.arrayArrayOfModel, arrayTest.arrayArrayOfModel);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayOfString, arrayArrayOfInteger, arrayArrayOfModel);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayTest {\n");
+    
+    sb.append("    arrayOfString: ").append(toIndentedString(arrayOfString)).append("\n");
+    sb.append("    arrayArrayOfInteger: ").append(toIndentedString(arrayArrayOfInteger)).append("\n");
+    sb.append("    arrayArrayOfModel: ").append(toIndentedString(arrayArrayOfModel)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/BigCat.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/BigCat.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f4a080ad8d207649ed357bd5b170142b921935f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/BigCat.java
@@ -0,0 +1,126 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.BigCatAllOf;
+import org.openapitools.model.Cat;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * BigCat
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class BigCat extends Cat  {
+  /**
+   * Gets or Sets kind
+   */
+  public enum KindEnum {
+    LIONS("lions"),
+    
+    TIGERS("tigers"),
+    
+    LEOPARDS("leopards"),
+    
+    JAGUARS("jaguars");
+
+    private String value;
+
+    KindEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static KindEnum fromValue(String value) {
+      for (KindEnum b : KindEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("kind")
+  private KindEnum kind;
+
+  public BigCat kind(KindEnum kind) {
+    this.kind = kind;
+    return this;
+  }
+
+  /**
+   * Get kind
+   * @return kind
+  */
+  @Schema(name = "kind", defaultValue = "")
+
+
+  public KindEnum getKind() {
+    return kind;
+  }
+
+  public void setKind(KindEnum kind) {
+    this.kind = kind;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BigCat bigCat = (BigCat) o;
+    return Objects.equals(this.kind, bigCat.kind) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(kind, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BigCat {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    kind: ").append(toIndentedString(kind)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/BigCatAllOf.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/BigCatAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..d0a47ab5127c66f1da66cb709a5a94d3ddf03bfe
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/BigCatAllOf.java
@@ -0,0 +1,123 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * BigCatAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class BigCatAllOf   {
+  /**
+   * Gets or Sets kind
+   */
+  public enum KindEnum {
+    LIONS("lions"),
+    
+    TIGERS("tigers"),
+    
+    LEOPARDS("leopards"),
+    
+    JAGUARS("jaguars");
+
+    private String value;
+
+    KindEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static KindEnum fromValue(String value) {
+      for (KindEnum b : KindEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("kind")
+  private KindEnum kind;
+
+  public BigCatAllOf kind(KindEnum kind) {
+    this.kind = kind;
+    return this;
+  }
+
+  /**
+   * Get kind
+   * @return kind
+  */
+  @Schema(name = "kind", defaultValue = "")
+
+
+  public KindEnum getKind() {
+    return kind;
+  }
+
+  public void setKind(KindEnum kind) {
+    this.kind = kind;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BigCatAllOf bigCatAllOf = (BigCatAllOf) o;
+    return Objects.equals(this.kind, bigCatAllOf.kind);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(kind);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BigCatAllOf {\n");
+    
+    sb.append("    kind: ").append(toIndentedString(kind)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Capitalization.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Capitalization.java
new file mode 100644
index 0000000000000000000000000000000000000000..92d9a7245f168d96d975f14ce65aac2276c59f73
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Capitalization.java
@@ -0,0 +1,208 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Capitalization
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Capitalization   {
+  @JsonProperty("smallCamel")
+  private String smallCamel;
+
+  @JsonProperty("CapitalCamel")
+  private String capitalCamel;
+
+  @JsonProperty("small_Snake")
+  private String smallSnake;
+
+  @JsonProperty("Capital_Snake")
+  private String capitalSnake;
+
+  @JsonProperty("SCA_ETH_Flow_Points")
+  private String scAETHFlowPoints;
+
+  @JsonProperty("ATT_NAME")
+  private String ATT_NAME;
+
+  public Capitalization smallCamel(String smallCamel) {
+    this.smallCamel = smallCamel;
+    return this;
+  }
+
+  /**
+   * Get smallCamel
+   * @return smallCamel
+  */
+  @Schema(name = "smallCamel", defaultValue = "")
+
+
+  public String getSmallCamel() {
+    return smallCamel;
+  }
+
+  public void setSmallCamel(String smallCamel) {
+    this.smallCamel = smallCamel;
+  }
+
+  public Capitalization capitalCamel(String capitalCamel) {
+    this.capitalCamel = capitalCamel;
+    return this;
+  }
+
+  /**
+   * Get capitalCamel
+   * @return capitalCamel
+  */
+  @Schema(name = "capitalCamel", defaultValue = "")
+
+
+  public String getCapitalCamel() {
+    return capitalCamel;
+  }
+
+  public void setCapitalCamel(String capitalCamel) {
+    this.capitalCamel = capitalCamel;
+  }
+
+  public Capitalization smallSnake(String smallSnake) {
+    this.smallSnake = smallSnake;
+    return this;
+  }
+
+  /**
+   * Get smallSnake
+   * @return smallSnake
+  */
+  @Schema(name = "smallSnake", defaultValue = "")
+
+
+  public String getSmallSnake() {
+    return smallSnake;
+  }
+
+  public void setSmallSnake(String smallSnake) {
+    this.smallSnake = smallSnake;
+  }
+
+  public Capitalization capitalSnake(String capitalSnake) {
+    this.capitalSnake = capitalSnake;
+    return this;
+  }
+
+  /**
+   * Get capitalSnake
+   * @return capitalSnake
+  */
+  @Schema(name = "capitalSnake", defaultValue = "")
+
+
+  public String getCapitalSnake() {
+    return capitalSnake;
+  }
+
+  public void setCapitalSnake(String capitalSnake) {
+    this.capitalSnake = capitalSnake;
+  }
+
+  public Capitalization scAETHFlowPoints(String scAETHFlowPoints) {
+    this.scAETHFlowPoints = scAETHFlowPoints;
+    return this;
+  }
+
+  /**
+   * Get scAETHFlowPoints
+   * @return scAETHFlowPoints
+  */
+  @Schema(name = "scAETHFlowPoints", defaultValue = "")
+
+
+  public String getScAETHFlowPoints() {
+    return scAETHFlowPoints;
+  }
+
+  public void setScAETHFlowPoints(String scAETHFlowPoints) {
+    this.scAETHFlowPoints = scAETHFlowPoints;
+  }
+
+  public Capitalization ATT_NAME(String ATT_NAME) {
+    this.ATT_NAME = ATT_NAME;
+    return this;
+  }
+
+  /**
+   * Name of the pet 
+   * @return ATT_NAME
+  */
+  @Schema(name = "ATT_NAME", defaultValue = "Name of the pet ")
+
+
+  public String getATTNAME() {
+    return ATT_NAME;
+  }
+
+  public void setATTNAME(String ATT_NAME) {
+    this.ATT_NAME = ATT_NAME;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Capitalization capitalization = (Capitalization) o;
+    return Objects.equals(this.smallCamel, capitalization.smallCamel) &&
+        Objects.equals(this.capitalCamel, capitalization.capitalCamel) &&
+        Objects.equals(this.smallSnake, capitalization.smallSnake) &&
+        Objects.equals(this.capitalSnake, capitalization.capitalSnake) &&
+        Objects.equals(this.scAETHFlowPoints, capitalization.scAETHFlowPoints) &&
+        Objects.equals(this.ATT_NAME, capitalization.ATT_NAME);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(smallCamel, capitalCamel, smallSnake, capitalSnake, scAETHFlowPoints, ATT_NAME);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Capitalization {\n");
+    
+    sb.append("    smallCamel: ").append(toIndentedString(smallCamel)).append("\n");
+    sb.append("    capitalCamel: ").append(toIndentedString(capitalCamel)).append("\n");
+    sb.append("    smallSnake: ").append(toIndentedString(smallSnake)).append("\n");
+    sb.append("    capitalSnake: ").append(toIndentedString(capitalSnake)).append("\n");
+    sb.append("    scAETHFlowPoints: ").append(toIndentedString(scAETHFlowPoints)).append("\n");
+    sb.append("    ATT_NAME: ").append(toIndentedString(ATT_NAME)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Cat.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Cat.java
new file mode 100644
index 0000000000000000000000000000000000000000..2e496fb4accd023274cd8876f918d9bc81830216
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Cat.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.model.Animal;
+import org.openapitools.model.CatAllOf;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Cat
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Cat extends Animal  {
+  @JsonProperty("declawed")
+  private Boolean declawed;
+
+  public Cat declawed(Boolean declawed) {
+    this.declawed = declawed;
+    return this;
+  }
+
+  /**
+   * Get declawed
+   * @return declawed
+  */
+  @Schema(name = "declawed", defaultValue = "")
+
+
+  public Boolean getDeclawed() {
+    return declawed;
+  }
+
+  public void setDeclawed(Boolean declawed) {
+    this.declawed = declawed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Cat cat = (Cat) o;
+    return Objects.equals(this.declawed, cat.declawed) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(declawed, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Cat {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    declawed: ").append(toIndentedString(declawed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/CatAllOf.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/CatAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..b732a62b1bc3c125f93944e64bd0e7ddcee8b596
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/CatAllOf.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * CatAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class CatAllOf   {
+  @JsonProperty("declawed")
+  private Boolean declawed;
+
+  public CatAllOf declawed(Boolean declawed) {
+    this.declawed = declawed;
+    return this;
+  }
+
+  /**
+   * Get declawed
+   * @return declawed
+  */
+  @Schema(name = "declawed", defaultValue = "")
+
+
+  public Boolean getDeclawed() {
+    return declawed;
+  }
+
+  public void setDeclawed(Boolean declawed) {
+    this.declawed = declawed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CatAllOf catAllOf = (CatAllOf) o;
+    return Objects.equals(this.declawed, catAllOf.declawed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(declawed);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CatAllOf {\n");
+    
+    sb.append("    declawed: ").append(toIndentedString(declawed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Category.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Category.java
new file mode 100644
index 0000000000000000000000000000000000000000..038fc8df3afd7211ee72d0f74168dbf1423bfb14
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Category.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Category
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Category   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name = "default-name";
+
+  public Category id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Category name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Category category = (Category) o;
+    return Objects.equals(this.id, category.id) &&
+        Objects.equals(this.name, category.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Category {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ClassModel.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ClassModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa2a736f4fb527cad6a7a173117b0a211b4e5923
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ClassModel.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model with \&quot;_class\&quot; property
+ */
+@Schema(name = "ClassModel",description = "Model for testing model with \"_class\" property")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ClassModel   {
+  @JsonProperty("_class")
+  private String propertyClass;
+
+  public ClassModel propertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+    return this;
+  }
+
+  /**
+   * Get propertyClass
+   * @return propertyClass
+  */
+  @Schema(name = "propertyClass", defaultValue = "")
+
+
+  public String getPropertyClass() {
+    return propertyClass;
+  }
+
+  public void setPropertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ClassModel classModel = (ClassModel) o;
+    return Objects.equals(this.propertyClass, classModel.propertyClass);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(propertyClass);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ClassModel {\n");
+    
+    sb.append("    propertyClass: ").append(toIndentedString(propertyClass)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Client.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..e11bd4ff1b13d8e49d80ca56033f92f6b92d4a7f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Client.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Client
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Client   {
+  @JsonProperty("client")
+  private String client;
+
+  public Client client(String client) {
+    this.client = client;
+    return this;
+  }
+
+  /**
+   * Get client
+   * @return client
+  */
+  @Schema(name = "client", defaultValue = "")
+
+
+  public String getClient() {
+    return client;
+  }
+
+  public void setClient(String client) {
+    this.client = client;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Client client = (Client) o;
+    return Objects.equals(this.client, client.client);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(client);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Client {\n");
+    
+    sb.append("    client: ").append(toIndentedString(client)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Dog.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Dog.java
new file mode 100644
index 0000000000000000000000000000000000000000..ed5dc71a4ba24b421e4506efab00505af4d47fad
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Dog.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.model.Animal;
+import org.openapitools.model.DogAllOf;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Dog
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Dog extends Animal  {
+  @JsonProperty("breed")
+  private String breed;
+
+  public Dog breed(String breed) {
+    this.breed = breed;
+    return this;
+  }
+
+  /**
+   * Get breed
+   * @return breed
+  */
+  @Schema(name = "breed", defaultValue = "")
+
+
+  public String getBreed() {
+    return breed;
+  }
+
+  public void setBreed(String breed) {
+    this.breed = breed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Dog dog = (Dog) o;
+    return Objects.equals(this.breed, dog.breed) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(breed, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Dog {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    breed: ").append(toIndentedString(breed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/DogAllOf.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/DogAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c99bc376c3478a650e5f776f10c07b1921f7dd1
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/DogAllOf.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * DogAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class DogAllOf   {
+  @JsonProperty("breed")
+  private String breed;
+
+  public DogAllOf breed(String breed) {
+    this.breed = breed;
+    return this;
+  }
+
+  /**
+   * Get breed
+   * @return breed
+  */
+  @Schema(name = "breed", defaultValue = "")
+
+
+  public String getBreed() {
+    return breed;
+  }
+
+  public void setBreed(String breed) {
+    this.breed = breed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    DogAllOf dogAllOf = (DogAllOf) o;
+    return Objects.equals(this.breed, dogAllOf.breed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(breed);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class DogAllOf {\n");
+    
+    sb.append("    breed: ").append(toIndentedString(breed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/EnumArrays.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/EnumArrays.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1b2df0716a2aa0e29529f3c8b7c884739cb591c
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/EnumArrays.java
@@ -0,0 +1,190 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * EnumArrays
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class EnumArrays   {
+  /**
+   * Gets or Sets justSymbol
+   */
+  public enum JustSymbolEnum {
+    GREATER_THAN_OR_EQUAL_TO(">="),
+    
+    DOLLAR("$");
+
+    private String value;
+
+    JustSymbolEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static JustSymbolEnum fromValue(String value) {
+      for (JustSymbolEnum b : JustSymbolEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("just_symbol")
+  private JustSymbolEnum justSymbol;
+
+  /**
+   * Gets or Sets arrayEnum
+   */
+  public enum ArrayEnumEnum {
+    FISH("fish"),
+    
+    CRAB("crab");
+
+    private String value;
+
+    ArrayEnumEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static ArrayEnumEnum fromValue(String value) {
+      for (ArrayEnumEnum b : ArrayEnumEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("array_enum")
+  @Valid
+  private List<ArrayEnumEnum> arrayEnum = null;
+
+  public EnumArrays justSymbol(JustSymbolEnum justSymbol) {
+    this.justSymbol = justSymbol;
+    return this;
+  }
+
+  /**
+   * Get justSymbol
+   * @return justSymbol
+  */
+  @Schema(name = "justSymbol", defaultValue = "")
+
+
+  public JustSymbolEnum getJustSymbol() {
+    return justSymbol;
+  }
+
+  public void setJustSymbol(JustSymbolEnum justSymbol) {
+    this.justSymbol = justSymbol;
+  }
+
+  public EnumArrays arrayEnum(List<ArrayEnumEnum> arrayEnum) {
+    this.arrayEnum = arrayEnum;
+    return this;
+  }
+
+  public EnumArrays addArrayEnumItem(ArrayEnumEnum arrayEnumItem) {
+    if (this.arrayEnum == null) {
+      this.arrayEnum = new ArrayList<>();
+    }
+    this.arrayEnum.add(arrayEnumItem);
+    return this;
+  }
+
+  /**
+   * Get arrayEnum
+   * @return arrayEnum
+  */
+  @Schema(name = "arrayEnum", defaultValue = "")
+
+
+  public List<ArrayEnumEnum> getArrayEnum() {
+    return arrayEnum;
+  }
+
+  public void setArrayEnum(List<ArrayEnumEnum> arrayEnum) {
+    this.arrayEnum = arrayEnum;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    EnumArrays enumArrays = (EnumArrays) o;
+    return Objects.equals(this.justSymbol, enumArrays.justSymbol) &&
+        Objects.equals(this.arrayEnum, enumArrays.arrayEnum);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(justSymbol, arrayEnum);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class EnumArrays {\n");
+    
+    sb.append("    justSymbol: ").append(toIndentedString(justSymbol)).append("\n");
+    sb.append("    arrayEnum: ").append(toIndentedString(arrayEnum)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/EnumClass.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/EnumClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3d30c1ad453729c1e301ec513b2ad9bb8a3f600
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/EnumClass.java
@@ -0,0 +1,55 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets EnumClass
+ */
+public enum EnumClass {
+  
+  _ABC("_abc"),
+  
+  _EFG("-efg"),
+  
+  _XYZ_("(xyz)");
+
+  private String value;
+
+  EnumClass(String value) {
+    this.value = value;
+  }
+
+  @JsonValue
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(value);
+  }
+
+  @JsonCreator
+  public static EnumClass fromValue(String value) {
+    for (EnumClass b : EnumClass.values()) {
+      if (b.value.equals(value)) {
+        return b;
+      }
+    }
+    throw new IllegalArgumentException("Unexpected value '" + value + "'");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/EnumTest.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/EnumTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..938af53e2b816bd12614e5cfa329b6a5c9737b4a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/EnumTest.java
@@ -0,0 +1,331 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.OuterEnum;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * EnumTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class EnumTest   {
+  /**
+   * Gets or Sets enumString
+   */
+  public enum EnumStringEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower"),
+    
+    EMPTY("");
+
+    private String value;
+
+    EnumStringEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumStringEnum fromValue(String value) {
+      for (EnumStringEnum b : EnumStringEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_string")
+  private EnumStringEnum enumString;
+
+  /**
+   * Gets or Sets enumStringRequired
+   */
+  public enum EnumStringRequiredEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower"),
+    
+    EMPTY("");
+
+    private String value;
+
+    EnumStringRequiredEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumStringRequiredEnum fromValue(String value) {
+      for (EnumStringRequiredEnum b : EnumStringRequiredEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_string_required")
+  private EnumStringRequiredEnum enumStringRequired;
+
+  /**
+   * Gets or Sets enumInteger
+   */
+  public enum EnumIntegerEnum {
+    NUMBER_1(1),
+    
+    NUMBER_MINUS_1(-1);
+
+    private Integer value;
+
+    EnumIntegerEnum(Integer value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public Integer getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumIntegerEnum fromValue(Integer value) {
+      for (EnumIntegerEnum b : EnumIntegerEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_integer")
+  private EnumIntegerEnum enumInteger;
+
+  /**
+   * Gets or Sets enumNumber
+   */
+  public enum EnumNumberEnum {
+    NUMBER_1_DOT_1(1.1),
+    
+    NUMBER_MINUS_1_DOT_2(-1.2);
+
+    private Double value;
+
+    EnumNumberEnum(Double value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public Double getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumNumberEnum fromValue(Double value) {
+      for (EnumNumberEnum b : EnumNumberEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_number")
+  private EnumNumberEnum enumNumber;
+
+  @JsonProperty("outerEnum")
+  private OuterEnum outerEnum;
+
+  public EnumTest enumString(EnumStringEnum enumString) {
+    this.enumString = enumString;
+    return this;
+  }
+
+  /**
+   * Get enumString
+   * @return enumString
+  */
+  @Schema(name = "enumString", defaultValue = "")
+
+
+  public EnumStringEnum getEnumString() {
+    return enumString;
+  }
+
+  public void setEnumString(EnumStringEnum enumString) {
+    this.enumString = enumString;
+  }
+
+  public EnumTest enumStringRequired(EnumStringRequiredEnum enumStringRequired) {
+    this.enumStringRequired = enumStringRequired;
+    return this;
+  }
+
+  /**
+   * Get enumStringRequired
+   * @return enumStringRequired
+  */
+  @Schema(name = "enumStringRequired", required = true, defaultValue = "")
+  @NotNull
+
+
+  public EnumStringRequiredEnum getEnumStringRequired() {
+    return enumStringRequired;
+  }
+
+  public void setEnumStringRequired(EnumStringRequiredEnum enumStringRequired) {
+    this.enumStringRequired = enumStringRequired;
+  }
+
+  public EnumTest enumInteger(EnumIntegerEnum enumInteger) {
+    this.enumInteger = enumInteger;
+    return this;
+  }
+
+  /**
+   * Get enumInteger
+   * @return enumInteger
+  */
+  @Schema(name = "enumInteger", defaultValue = "")
+
+
+  public EnumIntegerEnum getEnumInteger() {
+    return enumInteger;
+  }
+
+  public void setEnumInteger(EnumIntegerEnum enumInteger) {
+    this.enumInteger = enumInteger;
+  }
+
+  public EnumTest enumNumber(EnumNumberEnum enumNumber) {
+    this.enumNumber = enumNumber;
+    return this;
+  }
+
+  /**
+   * Get enumNumber
+   * @return enumNumber
+  */
+  @Schema(name = "enumNumber", defaultValue = "")
+
+
+  public EnumNumberEnum getEnumNumber() {
+    return enumNumber;
+  }
+
+  public void setEnumNumber(EnumNumberEnum enumNumber) {
+    this.enumNumber = enumNumber;
+  }
+
+  public EnumTest outerEnum(OuterEnum outerEnum) {
+    this.outerEnum = outerEnum;
+    return this;
+  }
+
+  /**
+   * Get outerEnum
+   * @return outerEnum
+  */
+  @Schema(name = "outerEnum", defaultValue = "")
+
+  @Valid
+
+  public OuterEnum getOuterEnum() {
+    return outerEnum;
+  }
+
+  public void setOuterEnum(OuterEnum outerEnum) {
+    this.outerEnum = outerEnum;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    EnumTest enumTest = (EnumTest) o;
+    return Objects.equals(this.enumString, enumTest.enumString) &&
+        Objects.equals(this.enumStringRequired, enumTest.enumStringRequired) &&
+        Objects.equals(this.enumInteger, enumTest.enumInteger) &&
+        Objects.equals(this.enumNumber, enumTest.enumNumber) &&
+        Objects.equals(this.outerEnum, enumTest.outerEnum);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(enumString, enumStringRequired, enumInteger, enumNumber, outerEnum);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class EnumTest {\n");
+    
+    sb.append("    enumString: ").append(toIndentedString(enumString)).append("\n");
+    sb.append("    enumStringRequired: ").append(toIndentedString(enumStringRequired)).append("\n");
+    sb.append("    enumInteger: ").append(toIndentedString(enumInteger)).append("\n");
+    sb.append("    enumNumber: ").append(toIndentedString(enumNumber)).append("\n");
+    sb.append("    outerEnum: ").append(toIndentedString(outerEnum)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FileSchemaTestClass.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FileSchemaTestClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d1e9ca8495cde97f9cc2a350fbe63c78738934b
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FileSchemaTestClass.java
@@ -0,0 +1,121 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * FileSchemaTestClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FileSchemaTestClass   {
+  @JsonProperty("file")
+  private java.io.File file;
+
+  @JsonProperty("files")
+  @Valid
+  private List<java.io.File> files = null;
+
+  public FileSchemaTestClass file(java.io.File file) {
+    this.file = file;
+    return this;
+  }
+
+  /**
+   * Get file
+   * @return file
+  */
+  @Schema(name = "file", defaultValue = "")
+
+  @Valid
+
+  public java.io.File getFile() {
+    return file;
+  }
+
+  public void setFile(java.io.File file) {
+    this.file = file;
+  }
+
+  public FileSchemaTestClass files(List<java.io.File> files) {
+    this.files = files;
+    return this;
+  }
+
+  public FileSchemaTestClass addFilesItem(java.io.File filesItem) {
+    if (this.files == null) {
+      this.files = new ArrayList<>();
+    }
+    this.files.add(filesItem);
+    return this;
+  }
+
+  /**
+   * Get files
+   * @return files
+  */
+  @Schema(name = "files", defaultValue = "")
+
+  @Valid
+
+  public List<java.io.File> getFiles() {
+    return files;
+  }
+
+  public void setFiles(List<java.io.File> files) {
+    this.files = files;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    FileSchemaTestClass fileSchemaTestClass = (FileSchemaTestClass) o;
+    return Objects.equals(this.file, fileSchemaTestClass.file) &&
+        Objects.equals(this.files, fileSchemaTestClass.files);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(file, files);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class FileSchemaTestClass {\n");
+    
+    sb.append("    file: ").append(toIndentedString(file)).append("\n");
+    sb.append("    files: ").append(toIndentedString(files)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FormatTest.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FormatTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..6546370cd329ce02e7c034b5e3defbe1db6bde12
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FormatTest.java
@@ -0,0 +1,435 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.util.Arrays;
+import java.util.UUID;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * FormatTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FormatTest   {
+  @JsonProperty("integer")
+  private Integer integer;
+
+  @JsonProperty("int32")
+  private Integer int32;
+
+  @JsonProperty("int64")
+  private Long int64;
+
+  @JsonProperty("number")
+  private BigDecimal number;
+
+  @JsonProperty("float")
+  private Float _float;
+
+  @JsonProperty("double")
+  private Double _double;
+
+  @JsonProperty("string")
+  private String string;
+
+  @JsonProperty("byte")
+  private byte[] _byte;
+
+  @JsonProperty("binary")
+  private org.springframework.core.io.Resource binary;
+
+  @JsonProperty("date")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE)
+  private LocalDate date;
+
+  @JsonProperty("dateTime")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime dateTime;
+
+  @JsonProperty("uuid")
+  private UUID uuid;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("BigDecimal")
+  private BigDecimal bigDecimal;
+
+  public FormatTest integer(Integer integer) {
+    this.integer = integer;
+    return this;
+  }
+
+  /**
+   * Get integer
+   * minimum: 10
+   * maximum: 100
+   * @return integer
+  */
+  @Schema(name = "integer", defaultValue = "")
+
+@Min(10) @Max(100) 
+  public Integer getInteger() {
+    return integer;
+  }
+
+  public void setInteger(Integer integer) {
+    this.integer = integer;
+  }
+
+  public FormatTest int32(Integer int32) {
+    this.int32 = int32;
+    return this;
+  }
+
+  /**
+   * Get int32
+   * minimum: 20
+   * maximum: 200
+   * @return int32
+  */
+  @Schema(name = "int32", defaultValue = "")
+
+@Min(20) @Max(200) 
+  public Integer getInt32() {
+    return int32;
+  }
+
+  public void setInt32(Integer int32) {
+    this.int32 = int32;
+  }
+
+  public FormatTest int64(Long int64) {
+    this.int64 = int64;
+    return this;
+  }
+
+  /**
+   * Get int64
+   * @return int64
+  */
+  @Schema(name = "int64", defaultValue = "")
+
+
+  public Long getInt64() {
+    return int64;
+  }
+
+  public void setInt64(Long int64) {
+    this.int64 = int64;
+  }
+
+  public FormatTest number(BigDecimal number) {
+    this.number = number;
+    return this;
+  }
+
+  /**
+   * Get number
+   * minimum: 32.1
+   * maximum: 543.2
+   * @return number
+  */
+  @Schema(name = "number", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+@DecimalMin("32.1") @DecimalMax("543.2") 
+  public BigDecimal getNumber() {
+    return number;
+  }
+
+  public void setNumber(BigDecimal number) {
+    this.number = number;
+  }
+
+  public FormatTest _float(Float _float) {
+    this._float = _float;
+    return this;
+  }
+
+  /**
+   * Get _float
+   * minimum: 54.3
+   * maximum: 987.6
+   * @return _float
+  */
+  @Schema(name = "_float", defaultValue = "")
+
+@DecimalMin("54.3") @DecimalMax("987.6") 
+  public Float getFloat() {
+    return _float;
+  }
+
+  public void setFloat(Float _float) {
+    this._float = _float;
+  }
+
+  public FormatTest _double(Double _double) {
+    this._double = _double;
+    return this;
+  }
+
+  /**
+   * Get _double
+   * minimum: 67.8
+   * maximum: 123.4
+   * @return _double
+  */
+  @Schema(name = "_double", defaultValue = "")
+
+@DecimalMin("67.8") @DecimalMax("123.4") 
+  public Double getDouble() {
+    return _double;
+  }
+
+  public void setDouble(Double _double) {
+    this._double = _double;
+  }
+
+  public FormatTest string(String string) {
+    this.string = string;
+    return this;
+  }
+
+  /**
+   * Get string
+   * @return string
+  */
+  @Schema(name = "string", defaultValue = "")
+
+@Pattern(regexp = "/[a-z]/i") 
+  public String getString() {
+    return string;
+  }
+
+  public void setString(String string) {
+    this.string = string;
+  }
+
+  public FormatTest _byte(byte[] _byte) {
+    this._byte = _byte;
+    return this;
+  }
+
+  /**
+   * Get _byte
+   * @return _byte
+  */
+  @Schema(name = "_byte", required = true, defaultValue = "")
+  @NotNull
+
+
+  public byte[] getByte() {
+    return _byte;
+  }
+
+  public void setByte(byte[] _byte) {
+    this._byte = _byte;
+  }
+
+  public FormatTest binary(org.springframework.core.io.Resource binary) {
+    this.binary = binary;
+    return this;
+  }
+
+  /**
+   * Get binary
+   * @return binary
+  */
+  @Schema(name = "binary", defaultValue = "")
+
+  @Valid
+
+  public org.springframework.core.io.Resource getBinary() {
+    return binary;
+  }
+
+  public void setBinary(org.springframework.core.io.Resource binary) {
+    this.binary = binary;
+  }
+
+  public FormatTest date(LocalDate date) {
+    this.date = date;
+    return this;
+  }
+
+  /**
+   * Get date
+   * @return date
+  */
+  @Schema(name = "date", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public LocalDate getDate() {
+    return date;
+  }
+
+  public void setDate(LocalDate date) {
+    this.date = date;
+  }
+
+  public FormatTest dateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+    return this;
+  }
+
+  /**
+   * Get dateTime
+   * @return dateTime
+  */
+  @Schema(name = "dateTime", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getDateTime() {
+    return dateTime;
+  }
+
+  public void setDateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+  }
+
+  public FormatTest uuid(UUID uuid) {
+    this.uuid = uuid;
+    return this;
+  }
+
+  /**
+   * Get uuid
+   * @return uuid
+  */
+  @Schema(name = "uuid", example = "72f98069-206d-4f12-9f12-3d1e525a8e84", defaultValue = "")
+
+  @Valid
+
+  public UUID getUuid() {
+    return uuid;
+  }
+
+  public void setUuid(UUID uuid) {
+    this.uuid = uuid;
+  }
+
+  public FormatTest password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", required = true, defaultValue = "")
+  @NotNull
+
+@Size(min = 10, max = 64) 
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public FormatTest bigDecimal(BigDecimal bigDecimal) {
+    this.bigDecimal = bigDecimal;
+    return this;
+  }
+
+  /**
+   * Get bigDecimal
+   * @return bigDecimal
+  */
+  @Schema(name = "bigDecimal", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getBigDecimal() {
+    return bigDecimal;
+  }
+
+  public void setBigDecimal(BigDecimal bigDecimal) {
+    this.bigDecimal = bigDecimal;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    FormatTest formatTest = (FormatTest) o;
+    return Objects.equals(this.integer, formatTest.integer) &&
+        Objects.equals(this.int32, formatTest.int32) &&
+        Objects.equals(this.int64, formatTest.int64) &&
+        Objects.equals(this.number, formatTest.number) &&
+        Objects.equals(this._float, formatTest._float) &&
+        Objects.equals(this._double, formatTest._double) &&
+        Objects.equals(this.string, formatTest.string) &&
+        Arrays.equals(this._byte, formatTest._byte) &&
+        Objects.equals(this.binary, formatTest.binary) &&
+        Objects.equals(this.date, formatTest.date) &&
+        Objects.equals(this.dateTime, formatTest.dateTime) &&
+        Objects.equals(this.uuid, formatTest.uuid) &&
+        Objects.equals(this.password, formatTest.password) &&
+        Objects.equals(this.bigDecimal, formatTest.bigDecimal);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(integer, int32, int64, number, _float, _double, string, Arrays.hashCode(_byte), binary, date, dateTime, uuid, password, bigDecimal);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class FormatTest {\n");
+    
+    sb.append("    integer: ").append(toIndentedString(integer)).append("\n");
+    sb.append("    int32: ").append(toIndentedString(int32)).append("\n");
+    sb.append("    int64: ").append(toIndentedString(int64)).append("\n");
+    sb.append("    number: ").append(toIndentedString(number)).append("\n");
+    sb.append("    _float: ").append(toIndentedString(_float)).append("\n");
+    sb.append("    _double: ").append(toIndentedString(_double)).append("\n");
+    sb.append("    string: ").append(toIndentedString(string)).append("\n");
+    sb.append("    _byte: ").append(toIndentedString(_byte)).append("\n");
+    sb.append("    binary: ").append(toIndentedString(binary)).append("\n");
+    sb.append("    date: ").append(toIndentedString(date)).append("\n");
+    sb.append("    dateTime: ").append(toIndentedString(dateTime)).append("\n");
+    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    bigDecimal: ").append(toIndentedString(bigDecimal)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfb615a529fcf851112e0d03ebdda2b88636dd2e
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * HasOnlyReadOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class HasOnlyReadOnly   {
+  @JsonProperty("bar")
+  private String bar;
+
+  @JsonProperty("foo")
+  private String foo;
+
+  public HasOnlyReadOnly bar(String bar) {
+    this.bar = bar;
+    return this;
+  }
+
+  /**
+   * Get bar
+   * @return bar
+  */
+  @Schema(name = "bar", readOnly = true, defaultValue = "")
+
+
+  public String getBar() {
+    return bar;
+  }
+
+  public void setBar(String bar) {
+    this.bar = bar;
+  }
+
+  public HasOnlyReadOnly foo(String foo) {
+    this.foo = foo;
+    return this;
+  }
+
+  /**
+   * Get foo
+   * @return foo
+  */
+  @Schema(name = "foo", readOnly = true, defaultValue = "")
+
+
+  public String getFoo() {
+    return foo;
+  }
+
+  public void setFoo(String foo) {
+    this.foo = foo;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    HasOnlyReadOnly hasOnlyReadOnly = (HasOnlyReadOnly) o;
+    return Objects.equals(this.bar, hasOnlyReadOnly.bar) &&
+        Objects.equals(this.foo, hasOnlyReadOnly.foo);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(bar, foo);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class HasOnlyReadOnly {\n");
+    
+    sb.append("    bar: ").append(toIndentedString(bar)).append("\n");
+    sb.append("    foo: ").append(toIndentedString(foo)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/MapTest.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/MapTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ff73062758f04ef937017393c488750cc744270
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/MapTest.java
@@ -0,0 +1,234 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * MapTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MapTest   {
+  @JsonProperty("map_map_of_string")
+  @Valid
+  private Map<String, Map<String, String>> mapMapOfString = null;
+
+  /**
+   * Gets or Sets inner
+   */
+  public enum InnerEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower");
+
+    private String value;
+
+    InnerEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static InnerEnum fromValue(String value) {
+      for (InnerEnum b : InnerEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("map_of_enum_string")
+  @Valid
+  private Map<String, InnerEnum> mapOfEnumString = null;
+
+  @JsonProperty("direct_map")
+  @Valid
+  private Map<String, Boolean> directMap = null;
+
+  @JsonProperty("indirect_map")
+  @Valid
+  private Map<String, Boolean> indirectMap = null;
+
+  public MapTest mapMapOfString(Map<String, Map<String, String>> mapMapOfString) {
+    this.mapMapOfString = mapMapOfString;
+    return this;
+  }
+
+  public MapTest putMapMapOfStringItem(String key, Map<String, String> mapMapOfStringItem) {
+    if (this.mapMapOfString == null) {
+      this.mapMapOfString = new HashMap<>();
+    }
+    this.mapMapOfString.put(key, mapMapOfStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapOfString
+   * @return mapMapOfString
+  */
+  @Schema(name = "mapMapOfString", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, String>> getMapMapOfString() {
+    return mapMapOfString;
+  }
+
+  public void setMapMapOfString(Map<String, Map<String, String>> mapMapOfString) {
+    this.mapMapOfString = mapMapOfString;
+  }
+
+  public MapTest mapOfEnumString(Map<String, InnerEnum> mapOfEnumString) {
+    this.mapOfEnumString = mapOfEnumString;
+    return this;
+  }
+
+  public MapTest putMapOfEnumStringItem(String key, InnerEnum mapOfEnumStringItem) {
+    if (this.mapOfEnumString == null) {
+      this.mapOfEnumString = new HashMap<>();
+    }
+    this.mapOfEnumString.put(key, mapOfEnumStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapOfEnumString
+   * @return mapOfEnumString
+  */
+  @Schema(name = "mapOfEnumString", defaultValue = "")
+
+
+  public Map<String, InnerEnum> getMapOfEnumString() {
+    return mapOfEnumString;
+  }
+
+  public void setMapOfEnumString(Map<String, InnerEnum> mapOfEnumString) {
+    this.mapOfEnumString = mapOfEnumString;
+  }
+
+  public MapTest directMap(Map<String, Boolean> directMap) {
+    this.directMap = directMap;
+    return this;
+  }
+
+  public MapTest putDirectMapItem(String key, Boolean directMapItem) {
+    if (this.directMap == null) {
+      this.directMap = new HashMap<>();
+    }
+    this.directMap.put(key, directMapItem);
+    return this;
+  }
+
+  /**
+   * Get directMap
+   * @return directMap
+  */
+  @Schema(name = "directMap", defaultValue = "")
+
+
+  public Map<String, Boolean> getDirectMap() {
+    return directMap;
+  }
+
+  public void setDirectMap(Map<String, Boolean> directMap) {
+    this.directMap = directMap;
+  }
+
+  public MapTest indirectMap(Map<String, Boolean> indirectMap) {
+    this.indirectMap = indirectMap;
+    return this;
+  }
+
+  public MapTest putIndirectMapItem(String key, Boolean indirectMapItem) {
+    if (this.indirectMap == null) {
+      this.indirectMap = new HashMap<>();
+    }
+    this.indirectMap.put(key, indirectMapItem);
+    return this;
+  }
+
+  /**
+   * Get indirectMap
+   * @return indirectMap
+  */
+  @Schema(name = "indirectMap", defaultValue = "")
+
+
+  public Map<String, Boolean> getIndirectMap() {
+    return indirectMap;
+  }
+
+  public void setIndirectMap(Map<String, Boolean> indirectMap) {
+    this.indirectMap = indirectMap;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MapTest mapTest = (MapTest) o;
+    return Objects.equals(this.mapMapOfString, mapTest.mapMapOfString) &&
+        Objects.equals(this.mapOfEnumString, mapTest.mapOfEnumString) &&
+        Objects.equals(this.directMap, mapTest.directMap) &&
+        Objects.equals(this.indirectMap, mapTest.indirectMap);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(mapMapOfString, mapOfEnumString, directMap, indirectMap);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MapTest {\n");
+    
+    sb.append("    mapMapOfString: ").append(toIndentedString(mapMapOfString)).append("\n");
+    sb.append("    mapOfEnumString: ").append(toIndentedString(mapOfEnumString)).append("\n");
+    sb.append("    directMap: ").append(toIndentedString(directMap)).append("\n");
+    sb.append("    indirectMap: ").append(toIndentedString(indirectMap)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..03a7be43cc4a606ba8a493c1868c6d25eb1bfdd9
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
@@ -0,0 +1,152 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.time.OffsetDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.openapitools.model.Animal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * MixedPropertiesAndAdditionalPropertiesClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MixedPropertiesAndAdditionalPropertiesClass   {
+  @JsonProperty("uuid")
+  private UUID uuid;
+
+  @JsonProperty("dateTime")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime dateTime;
+
+  @JsonProperty("map")
+  @Valid
+  private Map<String, Animal> map = null;
+
+  public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) {
+    this.uuid = uuid;
+    return this;
+  }
+
+  /**
+   * Get uuid
+   * @return uuid
+  */
+  @Schema(name = "uuid", defaultValue = "")
+
+  @Valid
+
+  public UUID getUuid() {
+    return uuid;
+  }
+
+  public void setUuid(UUID uuid) {
+    this.uuid = uuid;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass dateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+    return this;
+  }
+
+  /**
+   * Get dateTime
+   * @return dateTime
+  */
+  @Schema(name = "dateTime", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getDateTime() {
+    return dateTime;
+  }
+
+  public void setDateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass map(Map<String, Animal> map) {
+    this.map = map;
+    return this;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal mapItem) {
+    if (this.map == null) {
+      this.map = new HashMap<>();
+    }
+    this.map.put(key, mapItem);
+    return this;
+  }
+
+  /**
+   * Get map
+   * @return map
+  */
+  @Schema(name = "map", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Animal> getMap() {
+    return map;
+  }
+
+  public void setMap(Map<String, Animal> map) {
+    this.map = map;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MixedPropertiesAndAdditionalPropertiesClass mixedPropertiesAndAdditionalPropertiesClass = (MixedPropertiesAndAdditionalPropertiesClass) o;
+    return Objects.equals(this.uuid, mixedPropertiesAndAdditionalPropertiesClass.uuid) &&
+        Objects.equals(this.dateTime, mixedPropertiesAndAdditionalPropertiesClass.dateTime) &&
+        Objects.equals(this.map, mixedPropertiesAndAdditionalPropertiesClass.map);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(uuid, dateTime, map);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MixedPropertiesAndAdditionalPropertiesClass {\n");
+    
+    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
+    sb.append("    dateTime: ").append(toIndentedString(dateTime)).append("\n");
+    sb.append("    map: ").append(toIndentedString(map)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Model200Response.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Model200Response.java
new file mode 100644
index 0000000000000000000000000000000000000000..77bf91649b08bc0b9401643f4a917f1c44ee5aef
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Model200Response.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model name starting with number
+ */
+@Schema(name = "200_response",description = "Model for testing model name starting with number")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Model200Response   {
+  @JsonProperty("name")
+  private Integer name;
+
+  @JsonProperty("class")
+  private String propertyClass;
+
+  public Model200Response name(Integer name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public Integer getName() {
+    return name;
+  }
+
+  public void setName(Integer name) {
+    this.name = name;
+  }
+
+  public Model200Response propertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+    return this;
+  }
+
+  /**
+   * Get propertyClass
+   * @return propertyClass
+  */
+  @Schema(name = "propertyClass", defaultValue = "")
+
+
+  public String getPropertyClass() {
+    return propertyClass;
+  }
+
+  public void setPropertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Model200Response _200response = (Model200Response) o;
+    return Objects.equals(this.name, _200response.name) &&
+        Objects.equals(this.propertyClass, _200response.propertyClass);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, propertyClass);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Model200Response {\n");
+    
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    propertyClass: ").append(toIndentedString(propertyClass)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ModelApiResponse.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ModelApiResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..2443600df226840aa8f7adc54617d4cca257329d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ModelApiResponse.java
@@ -0,0 +1,133 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ModelApiResponse
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelApiResponse   {
+  @JsonProperty("code")
+  private Integer code;
+
+  @JsonProperty("type")
+  private String type;
+
+  @JsonProperty("message")
+  private String message;
+
+  public ModelApiResponse code(Integer code) {
+    this.code = code;
+    return this;
+  }
+
+  /**
+   * Get code
+   * @return code
+  */
+  @Schema(name = "code", defaultValue = "")
+
+
+  public Integer getCode() {
+    return code;
+  }
+
+  public void setCode(Integer code) {
+    this.code = code;
+  }
+
+  public ModelApiResponse type(String type) {
+    this.type = type;
+    return this;
+  }
+
+  /**
+   * Get type
+   * @return type
+  */
+  @Schema(name = "type", defaultValue = "")
+
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public ModelApiResponse message(String message) {
+    this.message = message;
+    return this;
+  }
+
+  /**
+   * Get message
+   * @return message
+  */
+  @Schema(name = "message", defaultValue = "")
+
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelApiResponse _apiResponse = (ModelApiResponse) o;
+    return Objects.equals(this.code, _apiResponse.code) &&
+        Objects.equals(this.type, _apiResponse.type) &&
+        Objects.equals(this.message, _apiResponse.message);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(code, type, message);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelApiResponse {\n");
+    
+    sb.append("    code: ").append(toIndentedString(code)).append("\n");
+    sb.append("    type: ").append(toIndentedString(type)).append("\n");
+    sb.append("    message: ").append(toIndentedString(message)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ModelReturn.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ModelReturn.java
new file mode 100644
index 0000000000000000000000000000000000000000..0301a47e9f3e7c7f7c18f5cdfdcbe916c12fd340
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ModelReturn.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing reserved words
+ */
+@Schema(name = "Return",description = "Model for testing reserved words")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelReturn   {
+  @JsonProperty("return")
+  private Integer _return;
+
+  public ModelReturn _return(Integer _return) {
+    this._return = _return;
+    return this;
+  }
+
+  /**
+   * Get _return
+   * @return _return
+  */
+  @Schema(name = "_return", defaultValue = "")
+
+
+  public Integer getReturn() {
+    return _return;
+  }
+
+  public void setReturn(Integer _return) {
+    this._return = _return;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelReturn _return = (ModelReturn) o;
+    return Objects.equals(this._return, _return._return);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(_return);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelReturn {\n");
+    
+    sb.append("    _return: ").append(toIndentedString(_return)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Name.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Name.java
new file mode 100644
index 0000000000000000000000000000000000000000..62a16f80ee07ade8aaa8159110929935a3b8d6e0
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Name.java
@@ -0,0 +1,160 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model name same as property name
+ */
+@Schema(name = "Name",description = "Model for testing model name same as property name")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Name   {
+  @JsonProperty("name")
+  private Integer name;
+
+  @JsonProperty("snake_case")
+  private Integer snakeCase;
+
+  @JsonProperty("property")
+  private String property;
+
+  @JsonProperty("123Number")
+  private Integer _123number;
+
+  public Name name(Integer name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getName() {
+    return name;
+  }
+
+  public void setName(Integer name) {
+    this.name = name;
+  }
+
+  public Name snakeCase(Integer snakeCase) {
+    this.snakeCase = snakeCase;
+    return this;
+  }
+
+  /**
+   * Get snakeCase
+   * @return snakeCase
+  */
+  @Schema(name = "snakeCase", readOnly = true, defaultValue = "")
+
+
+  public Integer getSnakeCase() {
+    return snakeCase;
+  }
+
+  public void setSnakeCase(Integer snakeCase) {
+    this.snakeCase = snakeCase;
+  }
+
+  public Name property(String property) {
+    this.property = property;
+    return this;
+  }
+
+  /**
+   * Get property
+   * @return property
+  */
+  @Schema(name = "property", defaultValue = "")
+
+
+  public String getProperty() {
+    return property;
+  }
+
+  public void setProperty(String property) {
+    this.property = property;
+  }
+
+  public Name _123number(Integer _123number) {
+    this._123number = _123number;
+    return this;
+  }
+
+  /**
+   * Get _123number
+   * @return _123number
+  */
+  @Schema(name = "_123number", readOnly = true, defaultValue = "")
+
+
+  public Integer get123number() {
+    return _123number;
+  }
+
+  public void set123number(Integer _123number) {
+    this._123number = _123number;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Name name = (Name) o;
+    return Objects.equals(this.name, name.name) &&
+        Objects.equals(this.snakeCase, name.snakeCase) &&
+        Objects.equals(this.property, name.property) &&
+        Objects.equals(this._123number, name._123number);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, snakeCase, property, _123number);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Name {\n");
+    
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    snakeCase: ").append(toIndentedString(snakeCase)).append("\n");
+    sb.append("    property: ").append(toIndentedString(property)).append("\n");
+    sb.append("    _123number: ").append(toIndentedString(_123number)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/NumberOnly.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/NumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..521fad80d5a722f8bd3eb3072d330aa63ae083a3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/NumberOnly.java
@@ -0,0 +1,85 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * NumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class NumberOnly   {
+  @JsonProperty("JustNumber")
+  private BigDecimal justNumber;
+
+  public NumberOnly justNumber(BigDecimal justNumber) {
+    this.justNumber = justNumber;
+    return this;
+  }
+
+  /**
+   * Get justNumber
+   * @return justNumber
+  */
+  @Schema(name = "justNumber", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getJustNumber() {
+    return justNumber;
+  }
+
+  public void setJustNumber(BigDecimal justNumber) {
+    this.justNumber = justNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    NumberOnly numberOnly = (NumberOnly) o;
+    return Objects.equals(this.justNumber, numberOnly.justNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(justNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class NumberOnly {\n");
+    
+    sb.append("    justNumber: ").append(toIndentedString(justNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Order.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Order.java
new file mode 100644
index 0000000000000000000000000000000000000000..05071bdfe2bf754e2c7b8a18163b19c502908aff
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Order.java
@@ -0,0 +1,249 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.time.OffsetDateTime;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Order
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Order   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("petId")
+  private Long petId;
+
+  @JsonProperty("quantity")
+  private Integer quantity;
+
+  @JsonProperty("shipDate")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime shipDate;
+
+  /**
+   * Order Status
+   */
+  public enum StatusEnum {
+    PLACED("placed"),
+    
+    APPROVED("approved"),
+    
+    DELIVERED("delivered");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  @JsonProperty("complete")
+  private Boolean complete = false;
+
+  public Order id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Order petId(Long petId) {
+    this.petId = petId;
+    return this;
+  }
+
+  /**
+   * Get petId
+   * @return petId
+  */
+  @Schema(name = "petId", defaultValue = "")
+
+
+  public Long getPetId() {
+    return petId;
+  }
+
+  public void setPetId(Long petId) {
+    this.petId = petId;
+  }
+
+  public Order quantity(Integer quantity) {
+    this.quantity = quantity;
+    return this;
+  }
+
+  /**
+   * Get quantity
+   * @return quantity
+  */
+  @Schema(name = "quantity", defaultValue = "")
+
+
+  public Integer getQuantity() {
+    return quantity;
+  }
+
+  public void setQuantity(Integer quantity) {
+    this.quantity = quantity;
+  }
+
+  public Order shipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+    return this;
+  }
+
+  /**
+   * Get shipDate
+   * @return shipDate
+  */
+  @Schema(name = "shipDate", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getShipDate() {
+    return shipDate;
+  }
+
+  public void setShipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+  }
+
+  public Order status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Order Status
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "Order Status")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+  public Order complete(Boolean complete) {
+    this.complete = complete;
+    return this;
+  }
+
+  /**
+   * Get complete
+   * @return complete
+  */
+  @Schema(name = "complete", defaultValue = "")
+
+
+  public Boolean getComplete() {
+    return complete;
+  }
+
+  public void setComplete(Boolean complete) {
+    this.complete = complete;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Order order = (Order) o;
+    return Objects.equals(this.id, order.id) &&
+        Objects.equals(this.petId, order.petId) &&
+        Objects.equals(this.quantity, order.quantity) &&
+        Objects.equals(this.shipDate, order.shipDate) &&
+        Objects.equals(this.status, order.status) &&
+        Objects.equals(this.complete, order.complete);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, petId, quantity, shipDate, status, complete);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Order {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    petId: ").append(toIndentedString(petId)).append("\n");
+    sb.append("    quantity: ").append(toIndentedString(quantity)).append("\n");
+    sb.append("    shipDate: ").append(toIndentedString(shipDate)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    complete: ").append(toIndentedString(complete)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/OuterComposite.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/OuterComposite.java
new file mode 100644
index 0000000000000000000000000000000000000000..a721a3dde6a085844d35e03e0dfcf67a5febf507
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/OuterComposite.java
@@ -0,0 +1,135 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * OuterComposite
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class OuterComposite   {
+  @JsonProperty("my_number")
+  private BigDecimal myNumber;
+
+  @JsonProperty("my_string")
+  private String myString;
+
+  @JsonProperty("my_boolean")
+  private Boolean myBoolean;
+
+  public OuterComposite myNumber(BigDecimal myNumber) {
+    this.myNumber = myNumber;
+    return this;
+  }
+
+  /**
+   * Get myNumber
+   * @return myNumber
+  */
+  @Schema(name = "myNumber", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getMyNumber() {
+    return myNumber;
+  }
+
+  public void setMyNumber(BigDecimal myNumber) {
+    this.myNumber = myNumber;
+  }
+
+  public OuterComposite myString(String myString) {
+    this.myString = myString;
+    return this;
+  }
+
+  /**
+   * Get myString
+   * @return myString
+  */
+  @Schema(name = "myString", defaultValue = "")
+
+
+  public String getMyString() {
+    return myString;
+  }
+
+  public void setMyString(String myString) {
+    this.myString = myString;
+  }
+
+  public OuterComposite myBoolean(Boolean myBoolean) {
+    this.myBoolean = myBoolean;
+    return this;
+  }
+
+  /**
+   * Get myBoolean
+   * @return myBoolean
+  */
+  @Schema(name = "myBoolean", defaultValue = "")
+
+
+  public Boolean getMyBoolean() {
+    return myBoolean;
+  }
+
+  public void setMyBoolean(Boolean myBoolean) {
+    this.myBoolean = myBoolean;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    OuterComposite outerComposite = (OuterComposite) o;
+    return Objects.equals(this.myNumber, outerComposite.myNumber) &&
+        Objects.equals(this.myString, outerComposite.myString) &&
+        Objects.equals(this.myBoolean, outerComposite.myBoolean);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(myNumber, myString, myBoolean);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class OuterComposite {\n");
+    
+    sb.append("    myNumber: ").append(toIndentedString(myNumber)).append("\n");
+    sb.append("    myString: ").append(toIndentedString(myString)).append("\n");
+    sb.append("    myBoolean: ").append(toIndentedString(myBoolean)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/OuterEnum.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/OuterEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba0cca8a5e815e7cbeaade6896dd0e834ef7b4fe
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/OuterEnum.java
@@ -0,0 +1,55 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets OuterEnum
+ */
+public enum OuterEnum {
+  
+  PLACED("placed"),
+  
+  APPROVED("approved"),
+  
+  DELIVERED("delivered");
+
+  private String value;
+
+  OuterEnum(String value) {
+    this.value = value;
+  }
+
+  @JsonValue
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(value);
+  }
+
+  @JsonCreator
+  public static OuterEnum fromValue(String value) {
+    for (OuterEnum b : OuterEnum.values()) {
+      if (b.value.equals(value)) {
+        return b;
+      }
+    }
+    throw new IllegalArgumentException("Unexpected value '" + value + "'");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Pet.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Pet.java
new file mode 100644
index 0000000000000000000000000000000000000000..988eb317134d1171efe16791018e271e4bc1b30f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Pet.java
@@ -0,0 +1,273 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import org.openapitools.model.Category;
+import org.openapitools.model.Tag;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Pet
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Pet   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("category")
+  private Category category;
+
+  @JsonProperty("name")
+  private String name;
+
+  @JsonProperty("photoUrls")
+  @Valid
+  private Set<String> photoUrls = new LinkedHashSet<>();
+
+  @JsonProperty("tags")
+  @Valid
+  private List<Tag> tags = null;
+
+  /**
+   * pet status in the store
+   */
+  public enum StatusEnum {
+    AVAILABLE("available"),
+    
+    PENDING("pending"),
+    
+    SOLD("sold");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  public Pet id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Pet category(Category category) {
+    this.category = category;
+    return this;
+  }
+
+  /**
+   * Get category
+   * @return category
+  */
+  @Schema(name = "category", defaultValue = "")
+
+  @Valid
+
+  public Category getCategory() {
+    return category;
+  }
+
+  public void setCategory(Category category) {
+    this.category = category;
+  }
+
+  public Pet name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", example = "doggie", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public Pet photoUrls(Set<String> photoUrls) {
+    this.photoUrls = photoUrls;
+    return this;
+  }
+
+  public Pet addPhotoUrlsItem(String photoUrlsItem) {
+    this.photoUrls.add(photoUrlsItem);
+    return this;
+  }
+
+  /**
+   * Get photoUrls
+   * @return photoUrls
+  */
+  @Schema(name = "photoUrls", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Set<String> getPhotoUrls() {
+    return photoUrls;
+  }
+
+  @JsonDeserialize(as = LinkedHashSet.class)
+  public void setPhotoUrls(Set<String> photoUrls) {
+    this.photoUrls = photoUrls;
+  }
+
+  public Pet tags(List<Tag> tags) {
+    this.tags = tags;
+    return this;
+  }
+
+  public Pet addTagsItem(Tag tagsItem) {
+    if (this.tags == null) {
+      this.tags = new ArrayList<>();
+    }
+    this.tags.add(tagsItem);
+    return this;
+  }
+
+  /**
+   * Get tags
+   * @return tags
+  */
+  @Schema(name = "tags", defaultValue = "")
+
+  @Valid
+
+  public List<Tag> getTags() {
+    return tags;
+  }
+
+  public void setTags(List<Tag> tags) {
+    this.tags = tags;
+  }
+
+  public Pet status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * pet status in the store
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "pet status in the store")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Pet pet = (Pet) o;
+    return Objects.equals(this.id, pet.id) &&
+        Objects.equals(this.category, pet.category) &&
+        Objects.equals(this.name, pet.name) &&
+        Objects.equals(this.photoUrls, pet.photoUrls) &&
+        Objects.equals(this.tags, pet.tags) &&
+        Objects.equals(this.status, pet.status);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, category, name, photoUrls, tags, status);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Pet {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    category: ").append(toIndentedString(category)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    photoUrls: ").append(toIndentedString(photoUrls)).append("\n");
+    sb.append("    tags: ").append(toIndentedString(tags)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ReadOnlyFirst.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ReadOnlyFirst.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c51770a8e662dd5d57de2c19f502e9d536db08a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/ReadOnlyFirst.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ReadOnlyFirst
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ReadOnlyFirst   {
+  @JsonProperty("bar")
+  private String bar;
+
+  @JsonProperty("baz")
+  private String baz;
+
+  public ReadOnlyFirst bar(String bar) {
+    this.bar = bar;
+    return this;
+  }
+
+  /**
+   * Get bar
+   * @return bar
+  */
+  @Schema(name = "bar", readOnly = true, defaultValue = "")
+
+
+  public String getBar() {
+    return bar;
+  }
+
+  public void setBar(String bar) {
+    this.bar = bar;
+  }
+
+  public ReadOnlyFirst baz(String baz) {
+    this.baz = baz;
+    return this;
+  }
+
+  /**
+   * Get baz
+   * @return baz
+  */
+  @Schema(name = "baz", defaultValue = "")
+
+
+  public String getBaz() {
+    return baz;
+  }
+
+  public void setBaz(String baz) {
+    this.baz = baz;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ReadOnlyFirst readOnlyFirst = (ReadOnlyFirst) o;
+    return Objects.equals(this.bar, readOnlyFirst.bar) &&
+        Objects.equals(this.baz, readOnlyFirst.baz);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(bar, baz);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ReadOnlyFirst {\n");
+    
+    sb.append("    bar: ").append(toIndentedString(bar)).append("\n");
+    sb.append("    baz: ").append(toIndentedString(baz)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/SpecialModelName.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/SpecialModelName.java
new file mode 100644
index 0000000000000000000000000000000000000000..75f4be4e9f8f067ae60abd1268d60347d2d95724
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/SpecialModelName.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * SpecialModelName
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class SpecialModelName   {
+  @JsonProperty("$special[property.name]")
+  private Long $specialPropertyName;
+
+  public SpecialModelName $specialPropertyName(Long $specialPropertyName) {
+    this.$specialPropertyName = $specialPropertyName;
+    return this;
+  }
+
+  /**
+   * Get $specialPropertyName
+   * @return $specialPropertyName
+  */
+  @Schema(name = "$specialPropertyName", defaultValue = "")
+
+
+  public Long get$SpecialPropertyName() {
+    return $specialPropertyName;
+  }
+
+  public void set$SpecialPropertyName(Long $specialPropertyName) {
+    this.$specialPropertyName = $specialPropertyName;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SpecialModelName $specialModelName = (SpecialModelName) o;
+    return Objects.equals(this.$specialPropertyName, $specialModelName.$specialPropertyName);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash($specialPropertyName);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SpecialModelName {\n");
+    
+    sb.append("    $specialPropertyName: ").append(toIndentedString($specialPropertyName)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Tag.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Tag.java
new file mode 100644
index 0000000000000000000000000000000000000000..8722df999bfc306ae4cdd20cb567d8dd9247ac02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/Tag.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Tag
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Tag   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Tag id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Tag name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Tag tag = (Tag) o;
+    return Objects.equals(this.id, tag.id) &&
+        Objects.equals(this.name, tag.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Tag {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/TypeHolderDefault.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/TypeHolderDefault.java
new file mode 100644
index 0000000000000000000000000000000000000000..19e9bf310f769ea1e09ee1c959df0a77f3a10215
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/TypeHolderDefault.java
@@ -0,0 +1,198 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * TypeHolderDefault
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class TypeHolderDefault   {
+  @JsonProperty("string_item")
+  private String stringItem = "what";
+
+  @JsonProperty("number_item")
+  private BigDecimal numberItem;
+
+  @JsonProperty("integer_item")
+  private Integer integerItem;
+
+  @JsonProperty("bool_item")
+  private Boolean boolItem = true;
+
+  @JsonProperty("array_item")
+  @Valid
+  private List<Integer> arrayItem = new ArrayList<>();
+
+  public TypeHolderDefault stringItem(String stringItem) {
+    this.stringItem = stringItem;
+    return this;
+  }
+
+  /**
+   * Get stringItem
+   * @return stringItem
+  */
+  @Schema(name = "stringItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getStringItem() {
+    return stringItem;
+  }
+
+  public void setStringItem(String stringItem) {
+    this.stringItem = stringItem;
+  }
+
+  public TypeHolderDefault numberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+    return this;
+  }
+
+  /**
+   * Get numberItem
+   * @return numberItem
+  */
+  @Schema(name = "numberItem", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public BigDecimal getNumberItem() {
+    return numberItem;
+  }
+
+  public void setNumberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+  }
+
+  public TypeHolderDefault integerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+    return this;
+  }
+
+  /**
+   * Get integerItem
+   * @return integerItem
+  */
+  @Schema(name = "integerItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getIntegerItem() {
+    return integerItem;
+  }
+
+  public void setIntegerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+  }
+
+  public TypeHolderDefault boolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+    return this;
+  }
+
+  /**
+   * Get boolItem
+   * @return boolItem
+  */
+  @Schema(name = "boolItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Boolean getBoolItem() {
+    return boolItem;
+  }
+
+  public void setBoolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+  }
+
+  public TypeHolderDefault arrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+    return this;
+  }
+
+  public TypeHolderDefault addArrayItemItem(Integer arrayItemItem) {
+    this.arrayItem.add(arrayItemItem);
+    return this;
+  }
+
+  /**
+   * Get arrayItem
+   * @return arrayItem
+  */
+  @Schema(name = "arrayItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<Integer> getArrayItem() {
+    return arrayItem;
+  }
+
+  public void setArrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TypeHolderDefault typeHolderDefault = (TypeHolderDefault) o;
+    return Objects.equals(this.stringItem, typeHolderDefault.stringItem) &&
+        Objects.equals(this.numberItem, typeHolderDefault.numberItem) &&
+        Objects.equals(this.integerItem, typeHolderDefault.integerItem) &&
+        Objects.equals(this.boolItem, typeHolderDefault.boolItem) &&
+        Objects.equals(this.arrayItem, typeHolderDefault.arrayItem);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(stringItem, numberItem, integerItem, boolItem, arrayItem);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TypeHolderDefault {\n");
+    
+    sb.append("    stringItem: ").append(toIndentedString(stringItem)).append("\n");
+    sb.append("    numberItem: ").append(toIndentedString(numberItem)).append("\n");
+    sb.append("    integerItem: ").append(toIndentedString(integerItem)).append("\n");
+    sb.append("    boolItem: ").append(toIndentedString(boolItem)).append("\n");
+    sb.append("    arrayItem: ").append(toIndentedString(arrayItem)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/TypeHolderExample.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/TypeHolderExample.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9a3762bc74b482b1d24566ae6837fd1c4952a8f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/TypeHolderExample.java
@@ -0,0 +1,224 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * TypeHolderExample
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class TypeHolderExample   {
+  @JsonProperty("string_item")
+  private String stringItem;
+
+  @JsonProperty("number_item")
+  private BigDecimal numberItem;
+
+  @JsonProperty("float_item")
+  private Float floatItem;
+
+  @JsonProperty("integer_item")
+  private Integer integerItem;
+
+  @JsonProperty("bool_item")
+  private Boolean boolItem;
+
+  @JsonProperty("array_item")
+  @Valid
+  private List<Integer> arrayItem = new ArrayList<>();
+
+  public TypeHolderExample stringItem(String stringItem) {
+    this.stringItem = stringItem;
+    return this;
+  }
+
+  /**
+   * Get stringItem
+   * @return stringItem
+  */
+  @Schema(name = "stringItem", example = "what", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getStringItem() {
+    return stringItem;
+  }
+
+  public void setStringItem(String stringItem) {
+    this.stringItem = stringItem;
+  }
+
+  public TypeHolderExample numberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+    return this;
+  }
+
+  /**
+   * Get numberItem
+   * @return numberItem
+  */
+  @Schema(name = "numberItem", example = "1.234", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public BigDecimal getNumberItem() {
+    return numberItem;
+  }
+
+  public void setNumberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+  }
+
+  public TypeHolderExample floatItem(Float floatItem) {
+    this.floatItem = floatItem;
+    return this;
+  }
+
+  /**
+   * Get floatItem
+   * @return floatItem
+  */
+  @Schema(name = "floatItem", example = "1.234", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Float getFloatItem() {
+    return floatItem;
+  }
+
+  public void setFloatItem(Float floatItem) {
+    this.floatItem = floatItem;
+  }
+
+  public TypeHolderExample integerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+    return this;
+  }
+
+  /**
+   * Get integerItem
+   * @return integerItem
+  */
+  @Schema(name = "integerItem", example = "-2", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getIntegerItem() {
+    return integerItem;
+  }
+
+  public void setIntegerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+  }
+
+  public TypeHolderExample boolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+    return this;
+  }
+
+  /**
+   * Get boolItem
+   * @return boolItem
+  */
+  @Schema(name = "boolItem", example = "true", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Boolean getBoolItem() {
+    return boolItem;
+  }
+
+  public void setBoolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+  }
+
+  public TypeHolderExample arrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+    return this;
+  }
+
+  public TypeHolderExample addArrayItemItem(Integer arrayItemItem) {
+    this.arrayItem.add(arrayItemItem);
+    return this;
+  }
+
+  /**
+   * Get arrayItem
+   * @return arrayItem
+  */
+  @Schema(name = "arrayItem", example = "[0, 1, 2, 3]", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<Integer> getArrayItem() {
+    return arrayItem;
+  }
+
+  public void setArrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TypeHolderExample typeHolderExample = (TypeHolderExample) o;
+    return Objects.equals(this.stringItem, typeHolderExample.stringItem) &&
+        Objects.equals(this.numberItem, typeHolderExample.numberItem) &&
+        Objects.equals(this.floatItem, typeHolderExample.floatItem) &&
+        Objects.equals(this.integerItem, typeHolderExample.integerItem) &&
+        Objects.equals(this.boolItem, typeHolderExample.boolItem) &&
+        Objects.equals(this.arrayItem, typeHolderExample.arrayItem);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(stringItem, numberItem, floatItem, integerItem, boolItem, arrayItem);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TypeHolderExample {\n");
+    
+    sb.append("    stringItem: ").append(toIndentedString(stringItem)).append("\n");
+    sb.append("    numberItem: ").append(toIndentedString(numberItem)).append("\n");
+    sb.append("    floatItem: ").append(toIndentedString(floatItem)).append("\n");
+    sb.append("    integerItem: ").append(toIndentedString(integerItem)).append("\n");
+    sb.append("    boolItem: ").append(toIndentedString(boolItem)).append("\n");
+    sb.append("    arrayItem: ").append(toIndentedString(arrayItem)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/User.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..83152a155535be4664d8a23d2cadc8f922021653
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/User.java
@@ -0,0 +1,258 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * User
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class User   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("username")
+  private String username;
+
+  @JsonProperty("firstName")
+  private String firstName;
+
+  @JsonProperty("lastName")
+  private String lastName;
+
+  @JsonProperty("email")
+  private String email;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("phone")
+  private String phone;
+
+  @JsonProperty("userStatus")
+  private Integer userStatus;
+
+  public User id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public User username(String username) {
+    this.username = username;
+    return this;
+  }
+
+  /**
+   * Get username
+   * @return username
+  */
+  @Schema(name = "username", defaultValue = "")
+
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public User firstName(String firstName) {
+    this.firstName = firstName;
+    return this;
+  }
+
+  /**
+   * Get firstName
+   * @return firstName
+  */
+  @Schema(name = "firstName", defaultValue = "")
+
+
+  public String getFirstName() {
+    return firstName;
+  }
+
+  public void setFirstName(String firstName) {
+    this.firstName = firstName;
+  }
+
+  public User lastName(String lastName) {
+    this.lastName = lastName;
+    return this;
+  }
+
+  /**
+   * Get lastName
+   * @return lastName
+  */
+  @Schema(name = "lastName", defaultValue = "")
+
+
+  public String getLastName() {
+    return lastName;
+  }
+
+  public void setLastName(String lastName) {
+    this.lastName = lastName;
+  }
+
+  public User email(String email) {
+    this.email = email;
+    return this;
+  }
+
+  /**
+   * Get email
+   * @return email
+  */
+  @Schema(name = "email", defaultValue = "")
+
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+  public User password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", defaultValue = "")
+
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public User phone(String phone) {
+    this.phone = phone;
+    return this;
+  }
+
+  /**
+   * Get phone
+   * @return phone
+  */
+  @Schema(name = "phone", defaultValue = "")
+
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public User userStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+    return this;
+  }
+
+  /**
+   * User Status
+   * @return userStatus
+  */
+  @Schema(name = "userStatus", defaultValue = "User Status")
+
+
+  public Integer getUserStatus() {
+    return userStatus;
+  }
+
+  public void setUserStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    User user = (User) o;
+    return Objects.equals(this.id, user.id) &&
+        Objects.equals(this.username, user.username) &&
+        Objects.equals(this.firstName, user.firstName) &&
+        Objects.equals(this.lastName, user.lastName) &&
+        Objects.equals(this.email, user.email) &&
+        Objects.equals(this.password, user.password) &&
+        Objects.equals(this.phone, user.phone) &&
+        Objects.equals(this.userStatus, user.userStatus);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class User {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    username: ").append(toIndentedString(username)).append("\n");
+    sb.append("    firstName: ").append(toIndentedString(firstName)).append("\n");
+    sb.append("    lastName: ").append(toIndentedString(lastName)).append("\n");
+    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    phone: ").append(toIndentedString(phone)).append("\n");
+    sb.append("    userStatus: ").append(toIndentedString(userStatus)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/XmlItem.java b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/XmlItem.java
new file mode 100644
index 0000000000000000000000000000000000000000..59a183db0f62d3228837978041ec6ba77949ce09
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/XmlItem.java
@@ -0,0 +1,872 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * XmlItem
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class XmlItem   {
+  @JsonProperty("attribute_string")
+  private String attributeString;
+
+  @JsonProperty("attribute_number")
+  private BigDecimal attributeNumber;
+
+  @JsonProperty("attribute_integer")
+  private Integer attributeInteger;
+
+  @JsonProperty("attribute_boolean")
+  private Boolean attributeBoolean;
+
+  @JsonProperty("wrapped_array")
+  @Valid
+  private List<Integer> wrappedArray = null;
+
+  @JsonProperty("name_string")
+  private String nameString;
+
+  @JsonProperty("name_number")
+  private BigDecimal nameNumber;
+
+  @JsonProperty("name_integer")
+  private Integer nameInteger;
+
+  @JsonProperty("name_boolean")
+  private Boolean nameBoolean;
+
+  @JsonProperty("name_array")
+  @Valid
+  private List<Integer> nameArray = null;
+
+  @JsonProperty("name_wrapped_array")
+  @Valid
+  private List<Integer> nameWrappedArray = null;
+
+  @JsonProperty("prefix_string")
+  private String prefixString;
+
+  @JsonProperty("prefix_number")
+  private BigDecimal prefixNumber;
+
+  @JsonProperty("prefix_integer")
+  private Integer prefixInteger;
+
+  @JsonProperty("prefix_boolean")
+  private Boolean prefixBoolean;
+
+  @JsonProperty("prefix_array")
+  @Valid
+  private List<Integer> prefixArray = null;
+
+  @JsonProperty("prefix_wrapped_array")
+  @Valid
+  private List<Integer> prefixWrappedArray = null;
+
+  @JsonProperty("namespace_string")
+  private String namespaceString;
+
+  @JsonProperty("namespace_number")
+  private BigDecimal namespaceNumber;
+
+  @JsonProperty("namespace_integer")
+  private Integer namespaceInteger;
+
+  @JsonProperty("namespace_boolean")
+  private Boolean namespaceBoolean;
+
+  @JsonProperty("namespace_array")
+  @Valid
+  private List<Integer> namespaceArray = null;
+
+  @JsonProperty("namespace_wrapped_array")
+  @Valid
+  private List<Integer> namespaceWrappedArray = null;
+
+  @JsonProperty("prefix_ns_string")
+  private String prefixNsString;
+
+  @JsonProperty("prefix_ns_number")
+  private BigDecimal prefixNsNumber;
+
+  @JsonProperty("prefix_ns_integer")
+  private Integer prefixNsInteger;
+
+  @JsonProperty("prefix_ns_boolean")
+  private Boolean prefixNsBoolean;
+
+  @JsonProperty("prefix_ns_array")
+  @Valid
+  private List<Integer> prefixNsArray = null;
+
+  @JsonProperty("prefix_ns_wrapped_array")
+  @Valid
+  private List<Integer> prefixNsWrappedArray = null;
+
+  public XmlItem attributeString(String attributeString) {
+    this.attributeString = attributeString;
+    return this;
+  }
+
+  /**
+   * Get attributeString
+   * @return attributeString
+  */
+  @Schema(name = "attributeString", example = "string", defaultValue = "")
+
+
+  public String getAttributeString() {
+    return attributeString;
+  }
+
+  public void setAttributeString(String attributeString) {
+    this.attributeString = attributeString;
+  }
+
+  public XmlItem attributeNumber(BigDecimal attributeNumber) {
+    this.attributeNumber = attributeNumber;
+    return this;
+  }
+
+  /**
+   * Get attributeNumber
+   * @return attributeNumber
+  */
+  @Schema(name = "attributeNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getAttributeNumber() {
+    return attributeNumber;
+  }
+
+  public void setAttributeNumber(BigDecimal attributeNumber) {
+    this.attributeNumber = attributeNumber;
+  }
+
+  public XmlItem attributeInteger(Integer attributeInteger) {
+    this.attributeInteger = attributeInteger;
+    return this;
+  }
+
+  /**
+   * Get attributeInteger
+   * @return attributeInteger
+  */
+  @Schema(name = "attributeInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getAttributeInteger() {
+    return attributeInteger;
+  }
+
+  public void setAttributeInteger(Integer attributeInteger) {
+    this.attributeInteger = attributeInteger;
+  }
+
+  public XmlItem attributeBoolean(Boolean attributeBoolean) {
+    this.attributeBoolean = attributeBoolean;
+    return this;
+  }
+
+  /**
+   * Get attributeBoolean
+   * @return attributeBoolean
+  */
+  @Schema(name = "attributeBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getAttributeBoolean() {
+    return attributeBoolean;
+  }
+
+  public void setAttributeBoolean(Boolean attributeBoolean) {
+    this.attributeBoolean = attributeBoolean;
+  }
+
+  public XmlItem wrappedArray(List<Integer> wrappedArray) {
+    this.wrappedArray = wrappedArray;
+    return this;
+  }
+
+  public XmlItem addWrappedArrayItem(Integer wrappedArrayItem) {
+    if (this.wrappedArray == null) {
+      this.wrappedArray = new ArrayList<>();
+    }
+    this.wrappedArray.add(wrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get wrappedArray
+   * @return wrappedArray
+  */
+  @Schema(name = "wrappedArray", defaultValue = "")
+
+
+  public List<Integer> getWrappedArray() {
+    return wrappedArray;
+  }
+
+  public void setWrappedArray(List<Integer> wrappedArray) {
+    this.wrappedArray = wrappedArray;
+  }
+
+  public XmlItem nameString(String nameString) {
+    this.nameString = nameString;
+    return this;
+  }
+
+  /**
+   * Get nameString
+   * @return nameString
+  */
+  @Schema(name = "nameString", example = "string", defaultValue = "")
+
+
+  public String getNameString() {
+    return nameString;
+  }
+
+  public void setNameString(String nameString) {
+    this.nameString = nameString;
+  }
+
+  public XmlItem nameNumber(BigDecimal nameNumber) {
+    this.nameNumber = nameNumber;
+    return this;
+  }
+
+  /**
+   * Get nameNumber
+   * @return nameNumber
+  */
+  @Schema(name = "nameNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getNameNumber() {
+    return nameNumber;
+  }
+
+  public void setNameNumber(BigDecimal nameNumber) {
+    this.nameNumber = nameNumber;
+  }
+
+  public XmlItem nameInteger(Integer nameInteger) {
+    this.nameInteger = nameInteger;
+    return this;
+  }
+
+  /**
+   * Get nameInteger
+   * @return nameInteger
+  */
+  @Schema(name = "nameInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getNameInteger() {
+    return nameInteger;
+  }
+
+  public void setNameInteger(Integer nameInteger) {
+    this.nameInteger = nameInteger;
+  }
+
+  public XmlItem nameBoolean(Boolean nameBoolean) {
+    this.nameBoolean = nameBoolean;
+    return this;
+  }
+
+  /**
+   * Get nameBoolean
+   * @return nameBoolean
+  */
+  @Schema(name = "nameBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getNameBoolean() {
+    return nameBoolean;
+  }
+
+  public void setNameBoolean(Boolean nameBoolean) {
+    this.nameBoolean = nameBoolean;
+  }
+
+  public XmlItem nameArray(List<Integer> nameArray) {
+    this.nameArray = nameArray;
+    return this;
+  }
+
+  public XmlItem addNameArrayItem(Integer nameArrayItem) {
+    if (this.nameArray == null) {
+      this.nameArray = new ArrayList<>();
+    }
+    this.nameArray.add(nameArrayItem);
+    return this;
+  }
+
+  /**
+   * Get nameArray
+   * @return nameArray
+  */
+  @Schema(name = "nameArray", defaultValue = "")
+
+
+  public List<Integer> getNameArray() {
+    return nameArray;
+  }
+
+  public void setNameArray(List<Integer> nameArray) {
+    this.nameArray = nameArray;
+  }
+
+  public XmlItem nameWrappedArray(List<Integer> nameWrappedArray) {
+    this.nameWrappedArray = nameWrappedArray;
+    return this;
+  }
+
+  public XmlItem addNameWrappedArrayItem(Integer nameWrappedArrayItem) {
+    if (this.nameWrappedArray == null) {
+      this.nameWrappedArray = new ArrayList<>();
+    }
+    this.nameWrappedArray.add(nameWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get nameWrappedArray
+   * @return nameWrappedArray
+  */
+  @Schema(name = "nameWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getNameWrappedArray() {
+    return nameWrappedArray;
+  }
+
+  public void setNameWrappedArray(List<Integer> nameWrappedArray) {
+    this.nameWrappedArray = nameWrappedArray;
+  }
+
+  public XmlItem prefixString(String prefixString) {
+    this.prefixString = prefixString;
+    return this;
+  }
+
+  /**
+   * Get prefixString
+   * @return prefixString
+  */
+  @Schema(name = "prefixString", example = "string", defaultValue = "")
+
+
+  public String getPrefixString() {
+    return prefixString;
+  }
+
+  public void setPrefixString(String prefixString) {
+    this.prefixString = prefixString;
+  }
+
+  public XmlItem prefixNumber(BigDecimal prefixNumber) {
+    this.prefixNumber = prefixNumber;
+    return this;
+  }
+
+  /**
+   * Get prefixNumber
+   * @return prefixNumber
+  */
+  @Schema(name = "prefixNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getPrefixNumber() {
+    return prefixNumber;
+  }
+
+  public void setPrefixNumber(BigDecimal prefixNumber) {
+    this.prefixNumber = prefixNumber;
+  }
+
+  public XmlItem prefixInteger(Integer prefixInteger) {
+    this.prefixInteger = prefixInteger;
+    return this;
+  }
+
+  /**
+   * Get prefixInteger
+   * @return prefixInteger
+  */
+  @Schema(name = "prefixInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getPrefixInteger() {
+    return prefixInteger;
+  }
+
+  public void setPrefixInteger(Integer prefixInteger) {
+    this.prefixInteger = prefixInteger;
+  }
+
+  public XmlItem prefixBoolean(Boolean prefixBoolean) {
+    this.prefixBoolean = prefixBoolean;
+    return this;
+  }
+
+  /**
+   * Get prefixBoolean
+   * @return prefixBoolean
+  */
+  @Schema(name = "prefixBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getPrefixBoolean() {
+    return prefixBoolean;
+  }
+
+  public void setPrefixBoolean(Boolean prefixBoolean) {
+    this.prefixBoolean = prefixBoolean;
+  }
+
+  public XmlItem prefixArray(List<Integer> prefixArray) {
+    this.prefixArray = prefixArray;
+    return this;
+  }
+
+  public XmlItem addPrefixArrayItem(Integer prefixArrayItem) {
+    if (this.prefixArray == null) {
+      this.prefixArray = new ArrayList<>();
+    }
+    this.prefixArray.add(prefixArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixArray
+   * @return prefixArray
+  */
+  @Schema(name = "prefixArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixArray() {
+    return prefixArray;
+  }
+
+  public void setPrefixArray(List<Integer> prefixArray) {
+    this.prefixArray = prefixArray;
+  }
+
+  public XmlItem prefixWrappedArray(List<Integer> prefixWrappedArray) {
+    this.prefixWrappedArray = prefixWrappedArray;
+    return this;
+  }
+
+  public XmlItem addPrefixWrappedArrayItem(Integer prefixWrappedArrayItem) {
+    if (this.prefixWrappedArray == null) {
+      this.prefixWrappedArray = new ArrayList<>();
+    }
+    this.prefixWrappedArray.add(prefixWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixWrappedArray
+   * @return prefixWrappedArray
+  */
+  @Schema(name = "prefixWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixWrappedArray() {
+    return prefixWrappedArray;
+  }
+
+  public void setPrefixWrappedArray(List<Integer> prefixWrappedArray) {
+    this.prefixWrappedArray = prefixWrappedArray;
+  }
+
+  public XmlItem namespaceString(String namespaceString) {
+    this.namespaceString = namespaceString;
+    return this;
+  }
+
+  /**
+   * Get namespaceString
+   * @return namespaceString
+  */
+  @Schema(name = "namespaceString", example = "string", defaultValue = "")
+
+
+  public String getNamespaceString() {
+    return namespaceString;
+  }
+
+  public void setNamespaceString(String namespaceString) {
+    this.namespaceString = namespaceString;
+  }
+
+  public XmlItem namespaceNumber(BigDecimal namespaceNumber) {
+    this.namespaceNumber = namespaceNumber;
+    return this;
+  }
+
+  /**
+   * Get namespaceNumber
+   * @return namespaceNumber
+  */
+  @Schema(name = "namespaceNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getNamespaceNumber() {
+    return namespaceNumber;
+  }
+
+  public void setNamespaceNumber(BigDecimal namespaceNumber) {
+    this.namespaceNumber = namespaceNumber;
+  }
+
+  public XmlItem namespaceInteger(Integer namespaceInteger) {
+    this.namespaceInteger = namespaceInteger;
+    return this;
+  }
+
+  /**
+   * Get namespaceInteger
+   * @return namespaceInteger
+  */
+  @Schema(name = "namespaceInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getNamespaceInteger() {
+    return namespaceInteger;
+  }
+
+  public void setNamespaceInteger(Integer namespaceInteger) {
+    this.namespaceInteger = namespaceInteger;
+  }
+
+  public XmlItem namespaceBoolean(Boolean namespaceBoolean) {
+    this.namespaceBoolean = namespaceBoolean;
+    return this;
+  }
+
+  /**
+   * Get namespaceBoolean
+   * @return namespaceBoolean
+  */
+  @Schema(name = "namespaceBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getNamespaceBoolean() {
+    return namespaceBoolean;
+  }
+
+  public void setNamespaceBoolean(Boolean namespaceBoolean) {
+    this.namespaceBoolean = namespaceBoolean;
+  }
+
+  public XmlItem namespaceArray(List<Integer> namespaceArray) {
+    this.namespaceArray = namespaceArray;
+    return this;
+  }
+
+  public XmlItem addNamespaceArrayItem(Integer namespaceArrayItem) {
+    if (this.namespaceArray == null) {
+      this.namespaceArray = new ArrayList<>();
+    }
+    this.namespaceArray.add(namespaceArrayItem);
+    return this;
+  }
+
+  /**
+   * Get namespaceArray
+   * @return namespaceArray
+  */
+  @Schema(name = "namespaceArray", defaultValue = "")
+
+
+  public List<Integer> getNamespaceArray() {
+    return namespaceArray;
+  }
+
+  public void setNamespaceArray(List<Integer> namespaceArray) {
+    this.namespaceArray = namespaceArray;
+  }
+
+  public XmlItem namespaceWrappedArray(List<Integer> namespaceWrappedArray) {
+    this.namespaceWrappedArray = namespaceWrappedArray;
+    return this;
+  }
+
+  public XmlItem addNamespaceWrappedArrayItem(Integer namespaceWrappedArrayItem) {
+    if (this.namespaceWrappedArray == null) {
+      this.namespaceWrappedArray = new ArrayList<>();
+    }
+    this.namespaceWrappedArray.add(namespaceWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get namespaceWrappedArray
+   * @return namespaceWrappedArray
+  */
+  @Schema(name = "namespaceWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getNamespaceWrappedArray() {
+    return namespaceWrappedArray;
+  }
+
+  public void setNamespaceWrappedArray(List<Integer> namespaceWrappedArray) {
+    this.namespaceWrappedArray = namespaceWrappedArray;
+  }
+
+  public XmlItem prefixNsString(String prefixNsString) {
+    this.prefixNsString = prefixNsString;
+    return this;
+  }
+
+  /**
+   * Get prefixNsString
+   * @return prefixNsString
+  */
+  @Schema(name = "prefixNsString", example = "string", defaultValue = "")
+
+
+  public String getPrefixNsString() {
+    return prefixNsString;
+  }
+
+  public void setPrefixNsString(String prefixNsString) {
+    this.prefixNsString = prefixNsString;
+  }
+
+  public XmlItem prefixNsNumber(BigDecimal prefixNsNumber) {
+    this.prefixNsNumber = prefixNsNumber;
+    return this;
+  }
+
+  /**
+   * Get prefixNsNumber
+   * @return prefixNsNumber
+  */
+  @Schema(name = "prefixNsNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getPrefixNsNumber() {
+    return prefixNsNumber;
+  }
+
+  public void setPrefixNsNumber(BigDecimal prefixNsNumber) {
+    this.prefixNsNumber = prefixNsNumber;
+  }
+
+  public XmlItem prefixNsInteger(Integer prefixNsInteger) {
+    this.prefixNsInteger = prefixNsInteger;
+    return this;
+  }
+
+  /**
+   * Get prefixNsInteger
+   * @return prefixNsInteger
+  */
+  @Schema(name = "prefixNsInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getPrefixNsInteger() {
+    return prefixNsInteger;
+  }
+
+  public void setPrefixNsInteger(Integer prefixNsInteger) {
+    this.prefixNsInteger = prefixNsInteger;
+  }
+
+  public XmlItem prefixNsBoolean(Boolean prefixNsBoolean) {
+    this.prefixNsBoolean = prefixNsBoolean;
+    return this;
+  }
+
+  /**
+   * Get prefixNsBoolean
+   * @return prefixNsBoolean
+  */
+  @Schema(name = "prefixNsBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getPrefixNsBoolean() {
+    return prefixNsBoolean;
+  }
+
+  public void setPrefixNsBoolean(Boolean prefixNsBoolean) {
+    this.prefixNsBoolean = prefixNsBoolean;
+  }
+
+  public XmlItem prefixNsArray(List<Integer> prefixNsArray) {
+    this.prefixNsArray = prefixNsArray;
+    return this;
+  }
+
+  public XmlItem addPrefixNsArrayItem(Integer prefixNsArrayItem) {
+    if (this.prefixNsArray == null) {
+      this.prefixNsArray = new ArrayList<>();
+    }
+    this.prefixNsArray.add(prefixNsArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixNsArray
+   * @return prefixNsArray
+  */
+  @Schema(name = "prefixNsArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixNsArray() {
+    return prefixNsArray;
+  }
+
+  public void setPrefixNsArray(List<Integer> prefixNsArray) {
+    this.prefixNsArray = prefixNsArray;
+  }
+
+  public XmlItem prefixNsWrappedArray(List<Integer> prefixNsWrappedArray) {
+    this.prefixNsWrappedArray = prefixNsWrappedArray;
+    return this;
+  }
+
+  public XmlItem addPrefixNsWrappedArrayItem(Integer prefixNsWrappedArrayItem) {
+    if (this.prefixNsWrappedArray == null) {
+      this.prefixNsWrappedArray = new ArrayList<>();
+    }
+    this.prefixNsWrappedArray.add(prefixNsWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixNsWrappedArray
+   * @return prefixNsWrappedArray
+  */
+  @Schema(name = "prefixNsWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixNsWrappedArray() {
+    return prefixNsWrappedArray;
+  }
+
+  public void setPrefixNsWrappedArray(List<Integer> prefixNsWrappedArray) {
+    this.prefixNsWrappedArray = prefixNsWrappedArray;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    XmlItem xmlItem = (XmlItem) o;
+    return Objects.equals(this.attributeString, xmlItem.attributeString) &&
+        Objects.equals(this.attributeNumber, xmlItem.attributeNumber) &&
+        Objects.equals(this.attributeInteger, xmlItem.attributeInteger) &&
+        Objects.equals(this.attributeBoolean, xmlItem.attributeBoolean) &&
+        Objects.equals(this.wrappedArray, xmlItem.wrappedArray) &&
+        Objects.equals(this.nameString, xmlItem.nameString) &&
+        Objects.equals(this.nameNumber, xmlItem.nameNumber) &&
+        Objects.equals(this.nameInteger, xmlItem.nameInteger) &&
+        Objects.equals(this.nameBoolean, xmlItem.nameBoolean) &&
+        Objects.equals(this.nameArray, xmlItem.nameArray) &&
+        Objects.equals(this.nameWrappedArray, xmlItem.nameWrappedArray) &&
+        Objects.equals(this.prefixString, xmlItem.prefixString) &&
+        Objects.equals(this.prefixNumber, xmlItem.prefixNumber) &&
+        Objects.equals(this.prefixInteger, xmlItem.prefixInteger) &&
+        Objects.equals(this.prefixBoolean, xmlItem.prefixBoolean) &&
+        Objects.equals(this.prefixArray, xmlItem.prefixArray) &&
+        Objects.equals(this.prefixWrappedArray, xmlItem.prefixWrappedArray) &&
+        Objects.equals(this.namespaceString, xmlItem.namespaceString) &&
+        Objects.equals(this.namespaceNumber, xmlItem.namespaceNumber) &&
+        Objects.equals(this.namespaceInteger, xmlItem.namespaceInteger) &&
+        Objects.equals(this.namespaceBoolean, xmlItem.namespaceBoolean) &&
+        Objects.equals(this.namespaceArray, xmlItem.namespaceArray) &&
+        Objects.equals(this.namespaceWrappedArray, xmlItem.namespaceWrappedArray) &&
+        Objects.equals(this.prefixNsString, xmlItem.prefixNsString) &&
+        Objects.equals(this.prefixNsNumber, xmlItem.prefixNsNumber) &&
+        Objects.equals(this.prefixNsInteger, xmlItem.prefixNsInteger) &&
+        Objects.equals(this.prefixNsBoolean, xmlItem.prefixNsBoolean) &&
+        Objects.equals(this.prefixNsArray, xmlItem.prefixNsArray) &&
+        Objects.equals(this.prefixNsWrappedArray, xmlItem.prefixNsWrappedArray);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(attributeString, attributeNumber, attributeInteger, attributeBoolean, wrappedArray, nameString, nameNumber, nameInteger, nameBoolean, nameArray, nameWrappedArray, prefixString, prefixNumber, prefixInteger, prefixBoolean, prefixArray, prefixWrappedArray, namespaceString, namespaceNumber, namespaceInteger, namespaceBoolean, namespaceArray, namespaceWrappedArray, prefixNsString, prefixNsNumber, prefixNsInteger, prefixNsBoolean, prefixNsArray, prefixNsWrappedArray);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class XmlItem {\n");
+    
+    sb.append("    attributeString: ").append(toIndentedString(attributeString)).append("\n");
+    sb.append("    attributeNumber: ").append(toIndentedString(attributeNumber)).append("\n");
+    sb.append("    attributeInteger: ").append(toIndentedString(attributeInteger)).append("\n");
+    sb.append("    attributeBoolean: ").append(toIndentedString(attributeBoolean)).append("\n");
+    sb.append("    wrappedArray: ").append(toIndentedString(wrappedArray)).append("\n");
+    sb.append("    nameString: ").append(toIndentedString(nameString)).append("\n");
+    sb.append("    nameNumber: ").append(toIndentedString(nameNumber)).append("\n");
+    sb.append("    nameInteger: ").append(toIndentedString(nameInteger)).append("\n");
+    sb.append("    nameBoolean: ").append(toIndentedString(nameBoolean)).append("\n");
+    sb.append("    nameArray: ").append(toIndentedString(nameArray)).append("\n");
+    sb.append("    nameWrappedArray: ").append(toIndentedString(nameWrappedArray)).append("\n");
+    sb.append("    prefixString: ").append(toIndentedString(prefixString)).append("\n");
+    sb.append("    prefixNumber: ").append(toIndentedString(prefixNumber)).append("\n");
+    sb.append("    prefixInteger: ").append(toIndentedString(prefixInteger)).append("\n");
+    sb.append("    prefixBoolean: ").append(toIndentedString(prefixBoolean)).append("\n");
+    sb.append("    prefixArray: ").append(toIndentedString(prefixArray)).append("\n");
+    sb.append("    prefixWrappedArray: ").append(toIndentedString(prefixWrappedArray)).append("\n");
+    sb.append("    namespaceString: ").append(toIndentedString(namespaceString)).append("\n");
+    sb.append("    namespaceNumber: ").append(toIndentedString(namespaceNumber)).append("\n");
+    sb.append("    namespaceInteger: ").append(toIndentedString(namespaceInteger)).append("\n");
+    sb.append("    namespaceBoolean: ").append(toIndentedString(namespaceBoolean)).append("\n");
+    sb.append("    namespaceArray: ").append(toIndentedString(namespaceArray)).append("\n");
+    sb.append("    namespaceWrappedArray: ").append(toIndentedString(namespaceWrappedArray)).append("\n");
+    sb.append("    prefixNsString: ").append(toIndentedString(prefixNsString)).append("\n");
+    sb.append("    prefixNsNumber: ").append(toIndentedString(prefixNsNumber)).append("\n");
+    sb.append("    prefixNsInteger: ").append(toIndentedString(prefixNsInteger)).append("\n");
+    sb.append("    prefixNsBoolean: ").append(toIndentedString(prefixNsBoolean)).append("\n");
+    sb.append("    prefixNsArray: ").append(toIndentedString(prefixNsArray)).append("\n");
+    sb.append("    prefixNsWrappedArray: ").append(toIndentedString(prefixNsWrappedArray)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/resources/application.properties b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/resources/application.properties
new file mode 100644
index 0000000000000000000000000000000000000000..9d06609db665e4097670b78b2c2adb4876cfc81f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/resources/application.properties
@@ -0,0 +1,3 @@
+server.port=80
+spring.jackson.date-format=org.openapitools.RFC3339DateFormat
+spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
diff --git a/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/resources/openapi.yaml b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/resources/openapi.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d6386dc39bf4ff458f7db1f6e23a6e1e22b7e8c6
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-implicitHeaders/src/main/resources/openapi.yaml
@@ -0,0 +1,2264 @@
+openapi: 3.0.1
+info:
+  description: 'This spec is mainly for testing Petstore server and contains fake
+    endpoints, models. Please do not use this for any other purpose. Special characters:
+    " \'
+  license:
+    name: Apache-2.0
+    url: https://www.apache.org/licenses/LICENSE-2.0.html
+  title: OpenAPI Petstore
+  version: 1.0.0
+servers:
+- url: http://petstore.swagger.io:80/v2
+tags:
+- description: Everything about your Pets
+  name: pet
+- description: Access to Petstore orders
+  name: store
+- description: Operations about user
+  name: user
+paths:
+  /pet:
+    post:
+      operationId: addPet
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Pet'
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/Pet'
+        description: Pet object that needs to be added to the store
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "405":
+          content: {}
+          description: Invalid input
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Add a new pet to the store
+      tags:
+      - pet
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    put:
+      operationId: updatePet
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Pet'
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/Pet'
+        description: Pet object that needs to be added to the store
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Pet not found
+        "405":
+          content: {}
+          description: Validation exception
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Update an existing pet
+      tags:
+      - pet
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/findByStatus:
+    get:
+      description: Multiple status values can be provided with comma separated strings
+      operationId: findPetsByStatus
+      parameters:
+      - description: Status values that need to be considered for filter
+        explode: false
+        in: query
+        name: status
+        required: true
+        schema:
+          items:
+            default: available
+            enum:
+            - available
+            - pending
+            - sold
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid status value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Finds Pets by status
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/findByTags:
+    get:
+      deprecated: true
+      description: Multiple tags can be provided with comma separated strings. Use
+        tag1, tag2, tag3 for testing.
+      operationId: findPetsByTags
+      parameters:
+      - description: Tags to filter by
+        explode: false
+        in: query
+        name: tags
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+          uniqueItems: true
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+                uniqueItems: true
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+                uniqueItems: true
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid tag value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Finds Pets by tags
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/{petId}:
+    delete:
+      operationId: deletePet
+      parameters:
+      - in: header
+        name: api_key
+        schema:
+          type: string
+      - description: Pet id to delete
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid pet value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Deletes a pet
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    get:
+      description: Returns a single pet
+      operationId: getPetById
+      parameters:
+      - description: ID of pet to return
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Pet'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Pet'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Pet not found
+      security:
+      - api_key: []
+      summary: Find pet by ID
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    post:
+      operationId: updatePetWithForm
+      parameters:
+      - description: ID of pet that needs to be updated
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                name:
+                  description: Updated name of the pet
+                  type: string
+                status:
+                  description: Updated status of the pet
+                  type: string
+      responses:
+        "405":
+          content: {}
+          description: Invalid input
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Updates a pet in the store with form data
+      tags:
+      - pet
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/{petId}/uploadImage:
+    post:
+      operationId: uploadFile
+      parameters:
+      - description: ID of pet to update
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                additionalMetadata:
+                  description: Additional data to pass to server
+                  type: string
+                file:
+                  description: file to upload
+                  format: binary
+                  type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiResponse'
+          description: successful operation
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: uploads an image
+      tags:
+      - pet
+      x-contentType: multipart/form-data
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /store/inventory:
+    get:
+      description: Returns a map of status codes to quantities
+      operationId: getInventory
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                additionalProperties:
+                  format: int32
+                  type: integer
+                type: object
+          description: successful operation
+      security:
+      - api_key: []
+      summary: Returns pet inventories by status
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /store/order:
+    post:
+      operationId: placeOrder
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/Order'
+        description: order placed for purchasing the pet
+        required: true
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Order'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Order'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid Order
+      summary: Place an order for a pet
+      tags:
+      - store
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /store/order/{order_id}:
+    delete:
+      description: For valid response try integer IDs with value < 1000. Anything
+        above 1000 or nonintegers will generate API errors
+      operationId: deleteOrder
+      parameters:
+      - description: ID of the order that needs to be deleted
+        in: path
+        name: order_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Order not found
+      summary: Delete purchase order by ID
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+    get:
+      description: For valid response try integer IDs with value <= 5 or > 10. Other
+        values will generated exceptions
+      operationId: getOrderById
+      parameters:
+      - description: ID of pet that needs to be fetched
+        in: path
+        name: order_id
+        required: true
+        schema:
+          format: int64
+          maximum: 5
+          minimum: 1
+          type: integer
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Order'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Order'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Order not found
+      summary: Find purchase order by ID
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /user:
+    post:
+      description: This can only be done by the logged in user.
+      operationId: createUser
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/User'
+        description: Created user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Create user
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/createWithArray:
+    post:
+      operationId: createUsersWithArrayInput
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                $ref: '#/components/schemas/User'
+              type: array
+        description: List of user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Creates list of users with given input array
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/createWithList:
+    post:
+      operationId: createUsersWithListInput
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                $ref: '#/components/schemas/User'
+              type: array
+        description: List of user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Creates list of users with given input array
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/login:
+    get:
+      operationId: loginUser
+      parameters:
+      - description: The user name for login
+        in: query
+        name: username
+        required: true
+        schema:
+          type: string
+      - description: The password for login in clear text
+        in: query
+        name: password
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                type: string
+            application/json:
+              schema:
+                type: string
+          description: successful operation
+          headers:
+            X-Rate-Limit:
+              description: calls per hour allowed by the user
+              schema:
+                format: int32
+                type: integer
+            X-Expires-After:
+              description: date in UTC when token expires
+              schema:
+                format: date-time
+                type: string
+        "400":
+          content: {}
+          description: Invalid username/password supplied
+      summary: Logs user into the system
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/logout:
+    get:
+      operationId: logoutUser
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Logs out current logged in user session
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/{username}:
+    delete:
+      description: This can only be done by the logged in user.
+      operationId: deleteUser
+      parameters:
+      - description: The name that needs to be deleted
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Delete user
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+    get:
+      operationId: getUserByName
+      parameters:
+      - description: The name that needs to be fetched. Use user1 for testing.
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/User'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/User'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Get user by user name
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+    put:
+      description: This can only be done by the logged in user.
+      operationId: updateUser
+      parameters:
+      - description: name that need to be deleted
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/User'
+        description: Updated user object
+        required: true
+      responses:
+        "400":
+          content: {}
+          description: Invalid user supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Updated user
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /fake_classname_test:
+    patch:
+      description: To test class name in snake case
+      operationId: testClassname
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      security:
+      - api_key_query: []
+      summary: To test class name in snake case
+      tags:
+      - fake_classname_tags 123#$%^
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake_classname_tags 123#$%^
+  /fake:
+    delete:
+      description: Fake endpoint to test group parameters (optional)
+      operationId: testGroupParameters
+      parameters:
+      - description: Required String in group parameters
+        in: query
+        name: required_string_group
+        required: true
+        schema:
+          type: integer
+      - description: Required Boolean in group parameters
+        in: header
+        name: required_boolean_group
+        required: true
+        schema:
+          type: boolean
+      - description: Required Integer in group parameters
+        in: query
+        name: required_int64_group
+        required: true
+        schema:
+          format: int64
+          type: integer
+      - description: String in group parameters
+        in: query
+        name: string_group
+        schema:
+          type: integer
+      - description: Boolean in group parameters
+        in: header
+        name: boolean_group
+        schema:
+          type: boolean
+      - description: Integer in group parameters
+        in: query
+        name: int64_group
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "400":
+          content: {}
+          description: Someting wrong
+      summary: Fake endpoint to test group parameters (optional)
+      tags:
+      - fake
+      x-group-parameters: true
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    get:
+      description: To test enum parameters
+      operationId: testEnumParameters
+      parameters:
+      - description: Header parameter enum test (string array)
+        explode: false
+        in: header
+        name: enum_header_string_array
+        schema:
+          items:
+            default: $
+            enum:
+            - '>'
+            - $
+            type: string
+          type: array
+        style: simple
+      - description: Header parameter enum test (string)
+        in: header
+        name: enum_header_string
+        schema:
+          default: -efg
+          enum:
+          - _abc
+          - -efg
+          - (xyz)
+          type: string
+      - description: Query parameter enum test (string array)
+        explode: false
+        in: query
+        name: enum_query_string_array
+        schema:
+          items:
+            default: $
+            enum:
+            - '>'
+            - $
+            type: string
+          type: array
+        style: form
+      - description: Query parameter enum test (string)
+        in: query
+        name: enum_query_string
+        schema:
+          default: -efg
+          enum:
+          - _abc
+          - -efg
+          - (xyz)
+          type: string
+      - description: Query parameter enum test (double)
+        in: query
+        name: enum_query_integer
+        schema:
+          enum:
+          - 1
+          - -2
+          format: int32
+          type: integer
+      - description: Query parameter enum test (double)
+        in: query
+        name: enum_query_double
+        schema:
+          enum:
+          - 1.1
+          - -1.2
+          format: double
+          type: number
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                enum_form_string_array:
+                  description: Form parameter enum test (string array)
+                  items:
+                    default: $
+                    enum:
+                    - '>'
+                    - $
+                    type: string
+                  type: array
+                enum_form_string:
+                  default: -efg
+                  description: Form parameter enum test (string)
+                  enum:
+                  - _abc
+                  - -efg
+                  - (xyz)
+                  type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid request
+        "404":
+          content: {}
+          description: Not found
+      summary: To test enum parameters
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    patch:
+      description: To test "client" model
+      operationId: testClientModel
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      summary: To test "client" model
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    post:
+      description: |-
+        Fake endpoint for testing various parameters
+         假端點
+         偽のエンドポイント
+         가짜 엔드 포인트
+      operationId: testEndpointParameters
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                integer:
+                  description: None
+                  format: int32
+                  maximum: 100
+                  minimum: 10
+                  type: integer
+                int32:
+                  description: None
+                  format: int32
+                  maximum: 200
+                  minimum: 20
+                  type: integer
+                int64:
+                  description: None
+                  format: int64
+                  type: integer
+                number:
+                  description: None
+                  maximum: 543.2
+                  minimum: 32.1
+                  type: number
+                float:
+                  description: None
+                  format: float
+                  maximum: 987.6
+                  type: number
+                double:
+                  description: None
+                  format: double
+                  maximum: 123.4
+                  minimum: 67.8
+                  type: number
+                string:
+                  description: None
+                  pattern: /[a-z]/i
+                  type: string
+                pattern_without_delimiter:
+                  description: None
+                  pattern: ^[A-Z].*
+                  type: string
+                byte:
+                  description: None
+                  format: byte
+                  type: string
+                binary:
+                  description: None
+                  format: binary
+                  type: string
+                date:
+                  description: None
+                  format: date
+                  type: string
+                dateTime:
+                  description: None
+                  format: date-time
+                  type: string
+                password:
+                  description: None
+                  format: password
+                  maxLength: 64
+                  minLength: 10
+                  type: string
+                callback:
+                  description: None
+                  type: string
+              required:
+              - byte
+              - double
+              - number
+              - pattern_without_delimiter
+        required: true
+      responses:
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      security:
+      - http_basic_test: []
+      summary: |-
+        Fake endpoint for testing various parameters
+         假端點
+         偽のエンドポイント
+         가짜 엔드 포인트
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/outer/number:
+    post:
+      description: Test serialization of outer number types
+      operationId: fakeOuterNumberSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterNumber'
+        description: Input number as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterNumber'
+          description: Output number
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/string:
+    post:
+      description: Test serialization of outer string types
+      operationId: fakeOuterStringSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterString'
+        description: Input string as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterString'
+          description: Output string
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/boolean:
+    post:
+      description: Test serialization of outer boolean types
+      operationId: fakeOuterBooleanSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterBoolean'
+        description: Input boolean as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterBoolean'
+          description: Output boolean
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/composite:
+    post:
+      description: Test serialization of object with outer number type
+      operationId: fakeOuterCompositeSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterComposite'
+        description: Input composite as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterComposite'
+          description: Output composite
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/jsonFormData:
+    get:
+      operationId: testJsonFormData
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                param:
+                  description: field1
+                  type: string
+                param2:
+                  description: field2
+                  type: string
+              required:
+              - param
+              - param2
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: test json serialization of form data
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/inline-additionalProperties:
+    post:
+      operationId: testInlineAdditionalProperties
+      requestBody:
+        content:
+          application/json:
+            schema:
+              additionalProperties:
+                type: string
+              type: object
+        description: request body
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: test inline additionalProperties
+      tags:
+      - fake
+      x-codegen-request-body-name: param
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/body-with-query-params:
+    put:
+      operationId: testBodyWithQueryParams
+      parameters:
+      - in: query
+        name: query
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/User'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/create_xml_item:
+    post:
+      description: this route creates an XmlItem
+      operationId: createXmlItem
+      requestBody:
+        content:
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          application/xml; charset=utf-8:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          application/xml; charset=utf-16:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml; charset=utf-8:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml; charset=utf-16:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+        description: XmlItem Body
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: creates an XmlItem
+      tags:
+      - fake
+      x-codegen-request-body-name: XmlItem
+      x-contentType: application/xml
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /another-fake/dummy:
+    patch:
+      description: To test special tags and operation ID starting with number
+      operationId: 123_test_@#$%_special_tags
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      summary: To test special tags
+      tags:
+      - $another-fake?
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: $another-fake?
+  /fake/body-with-file-schema:
+    put:
+      description: For this test, the body for this request much reference a schema
+        named `File`.
+      operationId: testBodyWithFileSchema
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/FileSchemaTestClass'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/test-query-parameters:
+    put:
+      description: To test the collection format in query parameters
+      operationId: testQueryParameterCollectionFormat
+      parameters:
+      - explode: false
+        in: query
+        name: pipe
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - in: query
+        name: ioutil
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+      - in: query
+        name: http
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: spaceDelimited
+      - explode: false
+        in: query
+        name: url
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - explode: true
+        in: query
+        name: context
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/{petId}/uploadImageWithRequiredFile:
+    post:
+      operationId: uploadFileWithRequiredFile
+      parameters:
+      - description: ID of pet to update
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                additionalMetadata:
+                  description: Additional data to pass to server
+                  type: string
+                requiredFile:
+                  description: file to upload
+                  format: binary
+                  type: string
+              required:
+              - requiredFile
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiResponse'
+          description: successful operation
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: uploads an image (required)
+      tags:
+      - pet
+      x-contentType: multipart/form-data
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+components:
+  schemas:
+    Order:
+      example:
+        petId: 6
+        quantity: 1
+        id: 0
+        shipDate: 2000-01-23T04:56:07.000+00:00
+        complete: false
+        status: placed
+      properties:
+        id:
+          format: int64
+          type: integer
+        petId:
+          format: int64
+          type: integer
+        quantity:
+          format: int32
+          type: integer
+        shipDate:
+          format: date-time
+          type: string
+        status:
+          description: Order Status
+          enum:
+          - placed
+          - approved
+          - delivered
+          type: string
+        complete:
+          default: false
+          type: boolean
+      type: object
+      xml:
+        name: Order
+    Category:
+      example:
+        name: default-name
+        id: 6
+      properties:
+        id:
+          format: int64
+          type: integer
+        name:
+          default: default-name
+          type: string
+      required:
+      - name
+      type: object
+      xml:
+        name: Category
+    User:
+      example:
+        firstName: firstName
+        lastName: lastName
+        password: password
+        userStatus: 6
+        phone: phone
+        id: 0
+        email: email
+        username: username
+      properties:
+        id:
+          format: int64
+          type: integer
+          x-is-unique: true
+        username:
+          type: string
+        firstName:
+          type: string
+        lastName:
+          type: string
+        email:
+          type: string
+        password:
+          type: string
+        phone:
+          type: string
+        userStatus:
+          description: User Status
+          format: int32
+          type: integer
+      type: object
+      xml:
+        name: User
+    Tag:
+      example:
+        name: name
+        id: 1
+      properties:
+        id:
+          format: int64
+          type: integer
+        name:
+          type: string
+      type: object
+      xml:
+        name: Tag
+    Pet:
+      example:
+        photoUrls:
+        - photoUrls
+        - photoUrls
+        name: doggie
+        id: 0
+        category:
+          name: default-name
+          id: 6
+        tags:
+        - name: name
+          id: 1
+        - name: name
+          id: 1
+        status: available
+      properties:
+        id:
+          format: int64
+          type: integer
+          x-is-unique: true
+        category:
+          $ref: '#/components/schemas/Category'
+        name:
+          example: doggie
+          type: string
+        photoUrls:
+          items:
+            type: string
+          type: array
+          uniqueItems: true
+          xml:
+            name: photoUrl
+            wrapped: true
+        tags:
+          items:
+            $ref: '#/components/schemas/Tag'
+          type: array
+          xml:
+            name: tag
+            wrapped: true
+        status:
+          description: pet status in the store
+          enum:
+          - available
+          - pending
+          - sold
+          type: string
+      required:
+      - name
+      - photoUrls
+      type: object
+      xml:
+        name: Pet
+    ApiResponse:
+      example:
+        code: 0
+        type: type
+        message: message
+      properties:
+        code:
+          format: int32
+          type: integer
+        type:
+          type: string
+        message:
+          type: string
+      type: object
+    $special[model.name]:
+      properties:
+        $special[property.name]:
+          format: int64
+          type: integer
+      type: object
+      xml:
+        name: $special[model.name]
+    Return:
+      description: Model for testing reserved words
+      properties:
+        return:
+          format: int32
+          type: integer
+      type: object
+      xml:
+        name: Return
+    Name:
+      description: Model for testing model name same as property name
+      properties:
+        name:
+          format: int32
+          type: integer
+        snake_case:
+          format: int32
+          readOnly: true
+          type: integer
+        property:
+          type: string
+        "123Number":
+          readOnly: true
+          type: integer
+      required:
+      - name
+      type: object
+      xml:
+        name: Name
+    "200_response":
+      description: Model for testing model name starting with number
+      properties:
+        name:
+          format: int32
+          type: integer
+        class:
+          type: string
+      type: object
+      xml:
+        name: Name
+    ClassModel:
+      description: Model for testing model with "_class" property
+      properties:
+        _class:
+          type: string
+      type: object
+    Dog:
+      allOf:
+      - $ref: '#/components/schemas/Animal'
+      - $ref: '#/components/schemas/Dog_allOf'
+    Cat:
+      allOf:
+      - $ref: '#/components/schemas/Animal'
+      - $ref: '#/components/schemas/Cat_allOf'
+    BigCat:
+      allOf:
+      - $ref: '#/components/schemas/Cat'
+      - $ref: '#/components/schemas/BigCat_allOf'
+    Animal:
+      discriminator:
+        propertyName: className
+      properties:
+        className:
+          type: string
+        color:
+          default: red
+          type: string
+      required:
+      - className
+      type: object
+    AnimalFarm:
+      items:
+        $ref: '#/components/schemas/Animal'
+      type: array
+    format_test:
+      properties:
+        integer:
+          maximum: 1E+2
+          minimum: 1E+1
+          type: integer
+        int32:
+          format: int32
+          maximum: 2E+2
+          minimum: 2E+1
+          type: integer
+        int64:
+          format: int64
+          type: integer
+        number:
+          maximum: 543.2
+          minimum: 32.1
+          type: number
+        float:
+          format: float
+          maximum: 987.6
+          minimum: 54.3
+          type: number
+        double:
+          format: double
+          maximum: 123.4
+          minimum: 67.8
+          type: number
+        string:
+          pattern: /[a-z]/i
+          type: string
+        byte:
+          format: byte
+          pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
+          type: string
+        binary:
+          format: binary
+          type: string
+        date:
+          format: date
+          type: string
+        dateTime:
+          format: date-time
+          type: string
+        uuid:
+          example: 72f98069-206d-4f12-9f12-3d1e525a8e84
+          format: uuid
+          type: string
+        password:
+          format: password
+          maxLength: 64
+          minLength: 10
+          type: string
+        BigDecimal:
+          format: number
+          type: string
+      required:
+      - byte
+      - date
+      - number
+      - password
+      type: object
+    EnumClass:
+      default: -efg
+      enum:
+      - _abc
+      - -efg
+      - (xyz)
+      type: string
+    Enum_Test:
+      properties:
+        enum_string:
+          enum:
+          - UPPER
+          - lower
+          - ""
+          type: string
+        enum_string_required:
+          enum:
+          - UPPER
+          - lower
+          - ""
+          type: string
+        enum_integer:
+          enum:
+          - 1
+          - -1
+          format: int32
+          type: integer
+        enum_number:
+          enum:
+          - 1.1
+          - -1.2
+          format: double
+          type: number
+        outerEnum:
+          $ref: '#/components/schemas/OuterEnum'
+      required:
+      - enum_string_required
+      type: object
+    AdditionalPropertiesClass:
+      properties:
+        map_string:
+          additionalProperties:
+            type: string
+          type: object
+        map_number:
+          additionalProperties:
+            type: number
+          type: object
+        map_integer:
+          additionalProperties:
+            type: integer
+          type: object
+        map_boolean:
+          additionalProperties:
+            type: boolean
+          type: object
+        map_array_integer:
+          additionalProperties:
+            items:
+              type: integer
+            type: array
+          type: object
+        map_array_anytype:
+          additionalProperties:
+            items:
+              properties: {}
+              type: object
+            type: array
+          type: object
+        map_map_string:
+          additionalProperties:
+            additionalProperties:
+              type: string
+            type: object
+          type: object
+        map_map_anytype:
+          additionalProperties:
+            additionalProperties:
+              properties: {}
+              type: object
+            type: object
+          type: object
+        anytype_1:
+          properties: {}
+          type: object
+        anytype_2:
+          type: object
+        anytype_3:
+          properties: {}
+          type: object
+      type: object
+    AdditionalPropertiesString:
+      additionalProperties:
+        type: string
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesInteger:
+      additionalProperties:
+        type: integer
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesNumber:
+      additionalProperties:
+        type: number
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesBoolean:
+      additionalProperties:
+        type: boolean
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesArray:
+      additionalProperties:
+        items:
+          properties: {}
+          type: object
+        type: array
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesObject:
+      additionalProperties:
+        additionalProperties:
+          properties: {}
+          type: object
+        type: object
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesAnyType:
+      additionalProperties:
+        properties: {}
+        type: object
+      properties:
+        name:
+          type: string
+      type: object
+    MixedPropertiesAndAdditionalPropertiesClass:
+      properties:
+        uuid:
+          format: uuid
+          type: string
+        dateTime:
+          format: date-time
+          type: string
+        map:
+          additionalProperties:
+            $ref: '#/components/schemas/Animal'
+          type: object
+      type: object
+    List:
+      properties:
+        "123-list":
+          type: string
+      type: object
+    Client:
+      example:
+        client: client
+      properties:
+        client:
+          type: string
+      type: object
+    ReadOnlyFirst:
+      properties:
+        bar:
+          readOnly: true
+          type: string
+        baz:
+          type: string
+      type: object
+    hasOnlyReadOnly:
+      properties:
+        bar:
+          readOnly: true
+          type: string
+        foo:
+          readOnly: true
+          type: string
+      type: object
+    Capitalization:
+      properties:
+        smallCamel:
+          type: string
+        CapitalCamel:
+          type: string
+        small_Snake:
+          type: string
+        Capital_Snake:
+          type: string
+        SCA_ETH_Flow_Points:
+          type: string
+        ATT_NAME:
+          description: |
+            Name of the pet
+          type: string
+      type: object
+    MapTest:
+      properties:
+        map_map_of_string:
+          additionalProperties:
+            additionalProperties:
+              type: string
+            type: object
+          type: object
+        map_of_enum_string:
+          additionalProperties:
+            enum:
+            - UPPER
+            - lower
+            type: string
+          type: object
+        direct_map:
+          additionalProperties:
+            type: boolean
+          type: object
+        indirect_map:
+          additionalProperties:
+            type: boolean
+          type: object
+      type: object
+    ArrayTest:
+      properties:
+        array_of_string:
+          items:
+            type: string
+          type: array
+        array_array_of_integer:
+          items:
+            items:
+              format: int64
+              type: integer
+            type: array
+          type: array
+        array_array_of_model:
+          items:
+            items:
+              $ref: '#/components/schemas/ReadOnlyFirst'
+            type: array
+          type: array
+      type: object
+    NumberOnly:
+      properties:
+        JustNumber:
+          type: number
+      type: object
+    ArrayOfNumberOnly:
+      properties:
+        ArrayNumber:
+          items:
+            type: number
+          type: array
+      type: object
+    ArrayOfArrayOfNumberOnly:
+      properties:
+        ArrayArrayNumber:
+          items:
+            items:
+              type: number
+            type: array
+          type: array
+      type: object
+    EnumArrays:
+      properties:
+        just_symbol:
+          enum:
+          - '>='
+          - $
+          type: string
+        array_enum:
+          items:
+            enum:
+            - fish
+            - crab
+            type: string
+          type: array
+      type: object
+    OuterEnum:
+      enum:
+      - placed
+      - approved
+      - delivered
+      type: string
+    OuterComposite:
+      example:
+        my_string: my_string
+        my_number: 0.8008281904610115
+        my_boolean: true
+      properties:
+        my_number:
+          type: number
+        my_string:
+          type: string
+        my_boolean:
+          type: boolean
+          x-codegen-body-parameter-name: boolean_post_body
+      type: object
+    OuterNumber:
+      type: number
+    OuterString:
+      type: string
+    OuterBoolean:
+      type: boolean
+      x-codegen-body-parameter-name: boolean_post_body
+    StringBooleanMap:
+      additionalProperties:
+        type: boolean
+      type: object
+    FileSchemaTestClass:
+      example:
+        file:
+          sourceURI: sourceURI
+        files:
+        - sourceURI: sourceURI
+        - sourceURI: sourceURI
+      properties:
+        file:
+          $ref: '#/components/schemas/File'
+        files:
+          items:
+            $ref: '#/components/schemas/File'
+          type: array
+      type: object
+    File:
+      description: Must be named `File` for test.
+      example:
+        sourceURI: sourceURI
+      properties:
+        sourceURI:
+          description: Test capitalization
+          type: string
+      type: object
+    TypeHolderDefault:
+      properties:
+        string_item:
+          default: what
+          type: string
+        number_item:
+          type: number
+        integer_item:
+          type: integer
+        bool_item:
+          default: true
+          type: boolean
+        array_item:
+          items:
+            type: integer
+          type: array
+      required:
+      - array_item
+      - bool_item
+      - integer_item
+      - number_item
+      - string_item
+      type: object
+    TypeHolderExample:
+      properties:
+        string_item:
+          example: what
+          type: string
+        number_item:
+          example: 1.234
+          type: number
+        float_item:
+          example: 1.234
+          format: float
+          type: number
+        integer_item:
+          example: -2
+          type: integer
+        bool_item:
+          example: true
+          type: boolean
+        array_item:
+          example:
+          - 0
+          - 1
+          - 2
+          - 3
+          items:
+            type: integer
+          type: array
+      required:
+      - array_item
+      - bool_item
+      - float_item
+      - integer_item
+      - number_item
+      - string_item
+      type: object
+    XmlItem:
+      properties:
+        attribute_string:
+          example: string
+          type: string
+          xml:
+            attribute: true
+        attribute_number:
+          example: 1.234
+          type: number
+          xml:
+            attribute: true
+        attribute_integer:
+          example: -2
+          type: integer
+          xml:
+            attribute: true
+        attribute_boolean:
+          example: true
+          type: boolean
+          xml:
+            attribute: true
+        wrapped_array:
+          items:
+            type: integer
+          type: array
+          xml:
+            wrapped: true
+        name_string:
+          example: string
+          type: string
+          xml:
+            name: xml_name_string
+        name_number:
+          example: 1.234
+          type: number
+          xml:
+            name: xml_name_number
+        name_integer:
+          example: -2
+          type: integer
+          xml:
+            name: xml_name_integer
+        name_boolean:
+          example: true
+          type: boolean
+          xml:
+            name: xml_name_boolean
+        name_array:
+          items:
+            type: integer
+            xml:
+              name: xml_name_array_item
+          type: array
+        name_wrapped_array:
+          items:
+            type: integer
+            xml:
+              name: xml_name_wrapped_array_item
+          type: array
+          xml:
+            name: xml_name_wrapped_array
+            wrapped: true
+        prefix_string:
+          example: string
+          type: string
+          xml:
+            prefix: ab
+        prefix_number:
+          example: 1.234
+          type: number
+          xml:
+            prefix: cd
+        prefix_integer:
+          example: -2
+          type: integer
+          xml:
+            prefix: ef
+        prefix_boolean:
+          example: true
+          type: boolean
+          xml:
+            prefix: gh
+        prefix_array:
+          items:
+            type: integer
+            xml:
+              prefix: ij
+          type: array
+        prefix_wrapped_array:
+          items:
+            type: integer
+            xml:
+              prefix: mn
+          type: array
+          xml:
+            prefix: kl
+            wrapped: true
+        namespace_string:
+          example: string
+          type: string
+          xml:
+            namespace: http://a.com/schema
+        namespace_number:
+          example: 1.234
+          type: number
+          xml:
+            namespace: http://b.com/schema
+        namespace_integer:
+          example: -2
+          type: integer
+          xml:
+            namespace: http://c.com/schema
+        namespace_boolean:
+          example: true
+          type: boolean
+          xml:
+            namespace: http://d.com/schema
+        namespace_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://e.com/schema
+          type: array
+        namespace_wrapped_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://g.com/schema
+          type: array
+          xml:
+            namespace: http://f.com/schema
+            wrapped: true
+        prefix_ns_string:
+          example: string
+          type: string
+          xml:
+            namespace: http://a.com/schema
+            prefix: a
+        prefix_ns_number:
+          example: 1.234
+          type: number
+          xml:
+            namespace: http://b.com/schema
+            prefix: b
+        prefix_ns_integer:
+          example: -2
+          type: integer
+          xml:
+            namespace: http://c.com/schema
+            prefix: c
+        prefix_ns_boolean:
+          example: true
+          type: boolean
+          xml:
+            namespace: http://d.com/schema
+            prefix: d
+        prefix_ns_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://e.com/schema
+              prefix: e
+          type: array
+        prefix_ns_wrapped_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://g.com/schema
+              prefix: g
+          type: array
+          xml:
+            namespace: http://f.com/schema
+            prefix: f
+            wrapped: true
+      type: object
+      xml:
+        namespace: http://a.com/schema
+        prefix: pre
+    Dog_allOf:
+      properties:
+        breed:
+          type: string
+      type: object
+    Cat_allOf:
+      properties:
+        declawed:
+          type: boolean
+      type: object
+    BigCat_allOf:
+      properties:
+        kind:
+          enum:
+          - lions
+          - tigers
+          - leopards
+          - jaguars
+          type: string
+      type: object
+  securitySchemes:
+    petstore_auth:
+      flows:
+        implicit:
+          authorizationUrl: http://petstore.swagger.io/api/oauth/dialog
+          scopes:
+            write:pets: modify pets in your account
+            read:pets: read your pets
+      type: oauth2
+    api_key:
+      in: header
+      name: api_key
+      type: apiKey
+    api_key_query:
+      in: query
+      name: api_key_query
+      type: apiKey
+    http_basic_test:
+      scheme: basic
+      type: http
+x-original-swagger-version: "2.0"
diff --git a/samples/openapi3/server/petstore/springboot-reactive/.openapi-generator-ignore b/samples/openapi3/server/petstore/springboot-reactive/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/.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/openapi3/server/petstore/springboot-reactive/.openapi-generator/FILES b/samples/openapi3/server/petstore/springboot-reactive/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..9df6c44a321395e8ff6f93c1f91d75bf1dc532f9
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/.openapi-generator/FILES
@@ -0,0 +1,72 @@
+README.md
+pom.xml
+src/main/java/org/openapitools/OpenAPI2SpringBoot.java
+src/main/java/org/openapitools/RFC3339DateFormat.java
+src/main/java/org/openapitools/api/AnotherFakeApi.java
+src/main/java/org/openapitools/api/AnotherFakeApiController.java
+src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
+src/main/java/org/openapitools/api/ApiUtil.java
+src/main/java/org/openapitools/api/FakeApi.java
+src/main/java/org/openapitools/api/FakeApiController.java
+src/main/java/org/openapitools/api/FakeApiDelegate.java
+src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
+src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
+src/main/java/org/openapitools/api/PetApi.java
+src/main/java/org/openapitools/api/PetApiController.java
+src/main/java/org/openapitools/api/PetApiDelegate.java
+src/main/java/org/openapitools/api/StoreApi.java
+src/main/java/org/openapitools/api/StoreApiController.java
+src/main/java/org/openapitools/api/StoreApiDelegate.java
+src/main/java/org/openapitools/api/UserApi.java
+src/main/java/org/openapitools/api/UserApiController.java
+src/main/java/org/openapitools/api/UserApiDelegate.java
+src/main/java/org/openapitools/configuration/HomeController.java
+src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
+src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
+src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
+src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
+src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
+src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
+src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
+src/main/java/org/openapitools/model/AdditionalPropertiesString.java
+src/main/java/org/openapitools/model/Animal.java
+src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
+src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
+src/main/java/org/openapitools/model/ArrayTest.java
+src/main/java/org/openapitools/model/BigCat.java
+src/main/java/org/openapitools/model/BigCatAllOf.java
+src/main/java/org/openapitools/model/Capitalization.java
+src/main/java/org/openapitools/model/Cat.java
+src/main/java/org/openapitools/model/CatAllOf.java
+src/main/java/org/openapitools/model/Category.java
+src/main/java/org/openapitools/model/ClassModel.java
+src/main/java/org/openapitools/model/Client.java
+src/main/java/org/openapitools/model/Dog.java
+src/main/java/org/openapitools/model/DogAllOf.java
+src/main/java/org/openapitools/model/EnumArrays.java
+src/main/java/org/openapitools/model/EnumClass.java
+src/main/java/org/openapitools/model/EnumTest.java
+src/main/java/org/openapitools/model/FileSchemaTestClass.java
+src/main/java/org/openapitools/model/FormatTest.java
+src/main/java/org/openapitools/model/HasOnlyReadOnly.java
+src/main/java/org/openapitools/model/MapTest.java
+src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
+src/main/java/org/openapitools/model/Model200Response.java
+src/main/java/org/openapitools/model/ModelApiResponse.java
+src/main/java/org/openapitools/model/ModelReturn.java
+src/main/java/org/openapitools/model/Name.java
+src/main/java/org/openapitools/model/NumberOnly.java
+src/main/java/org/openapitools/model/Order.java
+src/main/java/org/openapitools/model/OuterComposite.java
+src/main/java/org/openapitools/model/OuterEnum.java
+src/main/java/org/openapitools/model/Pet.java
+src/main/java/org/openapitools/model/ReadOnlyFirst.java
+src/main/java/org/openapitools/model/SpecialModelName.java
+src/main/java/org/openapitools/model/Tag.java
+src/main/java/org/openapitools/model/TypeHolderDefault.java
+src/main/java/org/openapitools/model/TypeHolderExample.java
+src/main/java/org/openapitools/model/User.java
+src/main/java/org/openapitools/model/XmlItem.java
+src/main/resources/application.properties
+src/main/resources/openapi.yaml
diff --git a/samples/openapi3/server/petstore/springboot-reactive/.openapi-generator/VERSION b/samples/openapi3/server/petstore/springboot-reactive/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..0984c4c1ad213d3a352049ad557efc9bd5140752
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-reactive/README.md b/samples/openapi3/server/petstore/springboot-reactive/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..55dc732c1b0047ece4f84c95e78eb8ab4c5466db
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/README.md
@@ -0,0 +1,13 @@
+# OpenAPI generated server
+
+Spring Boot Server
+
+
+## Overview
+This server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
+By using the [OpenAPI-Spec](https://openapis.org), you can easily generate a server stub.
+This is an example of building a OpenAPI-enabled server in Java using the SpringBoot framework.
+
+Start your server as a simple java application
+
+Change default port value in application.properties
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-reactive/pom.xml b/samples/openapi3/server/petstore/springboot-reactive/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a6268c2794f7af0d16d1b056af5e4daba2dd5164
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/pom.xml
@@ -0,0 +1,71 @@
+<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.openapi3</groupId>
+    <artifactId>springboot-reactive</artifactId>
+    <packaging>jar</packaging>
+    <name>springboot-reactive</name>
+    <version>1.0.0</version>
+    <properties>
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>2.1.11</swagger-core-version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.5.8</version>
+    </parent>
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-webflux</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>${swagger-core-version}</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.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>0.2.2</version>
+        </dependency>
+        <!-- Bean Validation API support -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/OpenAPI2SpringBoot.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/OpenAPI2SpringBoot.java
new file mode 100644
index 0000000000000000000000000000000000000000..254af022514262e2fea91116b3389a874f9db396
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/OpenAPI2SpringBoot.java
@@ -0,0 +1,63 @@
+package org.openapitools;
+
+import com.fasterxml.jackson.databind.Module;
+import org.openapitools.jackson.nullable.JsonNullableModule;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.ExitCodeGenerator;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.web.reactive.config.CorsRegistry;
+import org.springframework.web.reactive.config.ResourceHandlerRegistry;
+import org.springframework.web.reactive.config.WebFluxConfigurer;
+
+@SpringBootApplication
+@ComponentScan(basePackages = {"org.openapitools", "org.openapitools.api" , "org.openapitools.configuration"})
+public class OpenAPI2SpringBoot implements CommandLineRunner {
+
+    @Override
+    public void run(String... arg0) throws Exception {
+        if (arg0.length > 0 && arg0[0].equals("exitcode")) {
+            throw new ExitException();
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        new SpringApplication(OpenAPI2SpringBoot.class).run(args);
+    }
+
+    static class ExitException extends RuntimeException implements ExitCodeGenerator {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public int getExitCode() {
+            return 10;
+        }
+
+    }
+
+    @Bean
+    public WebFluxConfigurer webConfigurer() {
+        return new WebFluxConfigurer() {
+            /*@Override
+            public void addCorsMappings(CorsRegistry registry) {
+                registry.addMapping("/**")
+                        .allowedOrigins("*")
+                        .allowedMethods("*")
+                        .allowedHeaders("Content-Type");
+            }*/
+
+            @Override
+            public void addResourceHandlers(ResourceHandlerRegistry registry) {
+                registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/3.14.2/");
+            }
+        };
+    }
+
+    @Bean
+    public Module jsonNullableModule() {
+        return new JsonNullableModule();
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/RFC3339DateFormat.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/RFC3339DateFormat.java
new file mode 100644
index 0000000000000000000000000000000000000000..bcd3936d8b343ef7553782b552e9798b69bc5a02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/RFC3339DateFormat.java
@@ -0,0 +1,38 @@
+package org.openapitools;
+
+import com.fasterxml.jackson.databind.util.StdDateFormat;
+
+import java.text.DateFormat;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+public class RFC3339DateFormat extends DateFormat {
+  private static final long serialVersionUID = 1L;
+  private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC");
+
+  private final StdDateFormat fmt = new StdDateFormat()
+          .withTimeZone(TIMEZONE_Z)
+          .withColonInTimeZone(true);
+
+  public RFC3339DateFormat() {
+    this.calendar = new GregorianCalendar();
+  }
+
+  @Override
+  public Date parse(String source, ParsePosition pos) {
+    return fmt.parse(source, pos);
+  }
+
+  @Override
+  public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
+    return fmt.format(date, toAppendTo, fieldPosition);
+  }
+
+  @Override
+  public Object clone() {
+    return this;
+  }
+}
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..c7e2bb2b25a22f4530da108b169b8508dab28b7e
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -0,0 +1,66 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.springframework.http.codec.multipart.Part;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "another-fake", description = "the another-fake API")
+public interface AnotherFakeApi {
+
+    default AnotherFakeApiDelegate getDelegate() {
+        return new AnotherFakeApiDelegate() {};
+    }
+
+    /**
+     * PATCH /another-fake/dummy : To test special tags
+     * To test special tags and operation ID starting with number
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test special tags",
+        tags = { "$another-fake?" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/another-fake/dummy",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    default Mono<ResponseEntity<Client>> call123testSpecialTags(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Mono<Client> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().call123testSpecialTags(body, exchange);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApiController.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..df11134c80677d817f926701dd233d3f306e0529
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApiController.java
@@ -0,0 +1,22 @@
+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.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class AnotherFakeApiController implements AnotherFakeApi {
+
+    private final AnotherFakeApiDelegate delegate;
+
+    public AnotherFakeApiController(@org.springframework.beans.factory.annotation.Autowired(required = false) AnotherFakeApiDelegate delegate) {
+        this.delegate = Optional.ofNullable(delegate).orElse(new AnotherFakeApiDelegate() {});
+    }
+
+    @Override
+    public AnotherFakeApiDelegate getDelegate() {
+        return delegate;
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ef11c811c11576687b9941a9d16331134807ec0
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
@@ -0,0 +1,52 @@
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+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.web.multipart.MultipartFile;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.springframework.http.codec.multipart.Part;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * A delegate to be called by the {@link AnotherFakeApiController}}.
+ * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class.
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public interface AnotherFakeApiDelegate {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * PATCH /another-fake/dummy : To test special tags
+     * To test special tags and operation ID starting with number
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     * @see AnotherFakeApi#call123testSpecialTags
+     */
+    default Mono<ResponseEntity<Client>> call123testSpecialTags(Mono<Client> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"client\" : \"client\" }";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+        }
+        return result.then(Mono.empty());
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/ApiUtil.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/ApiUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ed3b0ab28d9a9d0d62fd9ad7b5b7188dc71d6c3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/ApiUtil.java
@@ -0,0 +1,20 @@
+package org.openapitools.api;
+
+import java.nio.charset.StandardCharsets;
+import org.springframework.core.io.buffer.DefaultDataBuffer;
+import org.springframework.core.io.buffer.DefaultDataBufferFactory;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+public class ApiUtil {
+    public static Mono<Void> getExampleResponse(ServerWebExchange exchange, MediaType mediaType, String example) {
+        ServerHttpResponse response = exchange.getResponse();
+        response.getHeaders().setContentType(mediaType);
+
+        byte[] exampleBytes = example.getBytes(StandardCharsets.UTF_8);
+        DefaultDataBuffer data = new DefaultDataBufferFactory().wrap(exampleBytes);
+        return response.writeWith(Mono.just(data));
+    }
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..729f78eb8246454c345d6dc8831bfb30327ad928
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java
@@ -0,0 +1,524 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.math.BigDecimal;
+import org.openapitools.model.Client;
+import org.openapitools.model.FileSchemaTestClass;
+import java.time.LocalDate;
+import java.util.Map;
+import org.openapitools.model.ModelApiResponse;
+import java.time.OffsetDateTime;
+import org.openapitools.model.OuterComposite;
+import org.openapitools.model.User;
+import org.openapitools.model.XmlItem;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.springframework.http.codec.multipart.Part;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "fake", description = "the fake API")
+public interface FakeApi {
+
+    default FakeApiDelegate getDelegate() {
+        return new FakeApiDelegate() {};
+    }
+
+    /**
+     * POST /fake/create_xml_item : creates an XmlItem
+     * this route creates an XmlItem
+     *
+     * @param xmlItem XmlItem Body (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "creates an XmlItem",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/create_xml_item",
+        consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
+    )
+    default Mono<ResponseEntity<Void>> createXmlItem(
+        @Parameter(name = "XmlItem", description = "XmlItem Body", required = true, schema = @Schema(description = "")) @Valid @RequestBody Mono<XmlItem> xmlItem,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().createXmlItem(xmlItem, exchange);
+    }
+
+
+    /**
+     * POST /fake/outer/boolean
+     * Test serialization of outer boolean types
+     *
+     * @param body Input boolean as post body (optional)
+     * @return Output boolean (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output boolean", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Boolean.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/boolean",
+        produces = { "*/*" }
+    )
+    default Mono<ResponseEntity<Boolean>> fakeOuterBooleanSerialize(
+        @Parameter(name = "body", description = "Input boolean as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) Mono<Boolean> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().fakeOuterBooleanSerialize(body, exchange);
+    }
+
+
+    /**
+     * POST /fake/outer/composite
+     * Test serialization of object with outer number type
+     *
+     * @param body Input composite as post body (optional)
+     * @return Output composite (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output composite", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  OuterComposite.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/composite",
+        produces = { "*/*" }
+    )
+    default Mono<ResponseEntity<OuterComposite>> fakeOuterCompositeSerialize(
+        @Parameter(name = "body", description = "Input composite as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) Mono<OuterComposite> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().fakeOuterCompositeSerialize(body, exchange);
+    }
+
+
+    /**
+     * POST /fake/outer/number
+     * Test serialization of outer number types
+     *
+     * @param body Input number as post body (optional)
+     * @return Output number (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output number", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  BigDecimal.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/number",
+        produces = { "*/*" }
+    )
+    default Mono<ResponseEntity<BigDecimal>> fakeOuterNumberSerialize(
+        @Parameter(name = "body", description = "Input number as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) Mono<BigDecimal> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().fakeOuterNumberSerialize(body, exchange);
+    }
+
+
+    /**
+     * POST /fake/outer/string
+     * Test serialization of outer string types
+     *
+     * @param body Input string as post body (optional)
+     * @return Output string (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output string", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/string",
+        produces = { "*/*" }
+    )
+    default Mono<ResponseEntity<String>> fakeOuterStringSerialize(
+        @Parameter(name = "body", description = "Input string as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) Mono<String> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().fakeOuterStringSerialize(body, exchange);
+    }
+
+
+    /**
+     * PUT /fake/body-with-file-schema
+     * For this test, the body for this request much reference a schema named &#x60;File&#x60;.
+     *
+     * @param body  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/body-with-file-schema",
+        consumes = { "application/json" }
+    )
+    default Mono<ResponseEntity<Void>> testBodyWithFileSchema(
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody Mono<FileSchemaTestClass> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().testBodyWithFileSchema(body, exchange);
+    }
+
+
+    /**
+     * PUT /fake/body-with-query-params
+     *
+     * @param query  (required)
+     * @param body  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/body-with-query-params",
+        consumes = { "application/json" }
+    )
+    default Mono<ResponseEntity<Void>> testBodyWithQueryParams(
+        @NotNull @Parameter(name = "query", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "query", required = true) String query,
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody Mono<User> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().testBodyWithQueryParams(query, body, exchange);
+    }
+
+
+    /**
+     * PATCH /fake : To test \&quot;client\&quot; model
+     * To test \&quot;client\&quot; model
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test \"client\" model",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/fake",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    default Mono<ResponseEntity<Client>> testClientModel(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Mono<Client> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().testClientModel(body, exchange);
+    }
+
+
+    /**
+     * POST /fake : Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     * Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     *
+     * @param number None (required)
+     * @param _double None (required)
+     * @param patternWithoutDelimiter None (required)
+     * @param _byte None (required)
+     * @param integer None (optional)
+     * @param int32 None (optional)
+     * @param int64 None (optional)
+     * @param _float None (optional)
+     * @param string None (optional)
+     * @param binary None (optional)
+     * @param date None (optional)
+     * @param dateTime None (optional)
+     * @param password None (optional)
+     * @param paramCallback None (optional)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        },
+        security = {
+            @SecurityRequirement(name = "http_basic_test")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default Mono<ResponseEntity<Void>> testEndpointParameters(
+        @Parameter(name = "number", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @Parameter(name = "double", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @Parameter(name = "pattern_without_delimiter", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @Parameter(name = "byte", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @Parameter(name = "integer", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @Parameter(name = "int32", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @Parameter(name = "int64", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @Parameter(name = "float", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "float", required = false) Float _float,
+        @Parameter(name = "string", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "string", required = false) String string,
+        @Parameter(name = "binary", description = "None", schema = @Schema(description = "")) @RequestPart(value = "binary", required = false) Flux<Part> binary,
+        @Parameter(name = "date", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @Parameter(name = "dateTime", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @Parameter(name = "password", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "password", required = false) String password,
+        @Parameter(name = "callback", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "callback", required = false) String paramCallback,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().testEndpointParameters(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, string, binary, date, dateTime, password, paramCallback, exchange);
+    }
+
+
+    /**
+     * GET /fake : To test enum parameters
+     * To test enum parameters
+     *
+     * @param enumHeaderStringArray Header parameter enum test (string array) (optional)
+     * @param enumHeaderString Header parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryStringArray Query parameter enum test (string array) (optional)
+     * @param enumQueryString Query parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryInteger Query parameter enum test (double) (optional)
+     * @param enumQueryDouble Query parameter enum test (double) (optional)
+     * @param enumFormStringArray Form parameter enum test (string array) (optional, default to $)
+     * @param enumFormString Form parameter enum test (string) (optional, default to -efg)
+     * @return Invalid request (status code 400)
+     *         or Not found (status code 404)
+     */
+    @Operation(
+        summary = "To test enum parameters",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid request"),
+            @ApiResponse(responseCode = "404", description = "Not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/fake",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default Mono<ResponseEntity<Void>> testEnumParameters(
+        @Parameter(name = "enum_header_string_array", description = "Header parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @Parameter(name = "enum_header_string", description = "Header parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @Parameter(name = "enum_query_string_array", description = "Query parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @Parameter(name = "enum_query_string", description = "Query parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @Parameter(name = "enum_query_integer", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1", "-2" })) @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @Parameter(name = "enum_query_double", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1.1", "-1.2" })) @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @Parameter(name = "enum_form_string_array", description = "Form parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @Parameter(name = "enum_form_string", description = "Form parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().testEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString, exchange);
+    }
+
+
+    /**
+     * DELETE /fake : Fake endpoint to test group parameters (optional)
+     * Fake endpoint to test group parameters (optional)
+     *
+     * @param requiredStringGroup Required String in group parameters (required)
+     * @param requiredBooleanGroup Required Boolean in group parameters (required)
+     * @param requiredInt64Group Required Integer in group parameters (required)
+     * @param stringGroup String in group parameters (optional)
+     * @param booleanGroup Boolean in group parameters (optional)
+     * @param int64Group Integer in group parameters (optional)
+     * @return Someting wrong (status code 400)
+     */
+    @Operation(
+        summary = "Fake endpoint to test group parameters (optional)",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Someting wrong")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/fake"
+    )
+    default Mono<ResponseEntity<Void>> testGroupParameters(
+        @NotNull @Parameter(name = "required_string_group", description = "Required String in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @Parameter(name = "required_boolean_group", description = "Required Boolean in group parameters", required = true, schema = @Schema(description = "")) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @Parameter(name = "required_int64_group", description = "Required Integer in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @Parameter(name = "string_group", description = "String in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @Parameter(name = "boolean_group", description = "Boolean in group parameters", schema = @Schema(description = "")) @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @Parameter(name = "int64_group", description = "Integer in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "int64_group", required = false) Long int64Group,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().testGroupParameters(requiredStringGroup, requiredBooleanGroup, requiredInt64Group, stringGroup, booleanGroup, int64Group, exchange);
+    }
+
+
+    /**
+     * POST /fake/inline-additionalProperties : test inline additionalProperties
+     *
+     * @param param request body (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "test inline additionalProperties",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/inline-additionalProperties",
+        consumes = { "application/json" }
+    )
+    default Mono<ResponseEntity<Void>> testInlineAdditionalProperties(
+        @Parameter(name = "param", description = "request body", required = true, schema = @Schema(description = "")) @Valid @RequestBody Mono<Map<String, String>> param,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().testInlineAdditionalProperties(param, exchange);
+    }
+
+
+    /**
+     * GET /fake/jsonFormData : test json serialization of form data
+     *
+     * @param param field1 (required)
+     * @param param2 field2 (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "test json serialization of form data",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/fake/jsonFormData",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default Mono<ResponseEntity<Void>> testJsonFormData(
+        @Parameter(name = "param", description = "field1", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "param", required = true) String param,
+        @Parameter(name = "param2", description = "field2", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "param2", required = true) String param2,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().testJsonFormData(param, param2, exchange);
+    }
+
+
+    /**
+     * PUT /fake/test-query-parameters
+     * To test the collection format in query parameters
+     *
+     * @param pipe  (required)
+     * @param ioutil  (required)
+     * @param http  (required)
+     * @param url  (required)
+     * @param context  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/test-query-parameters"
+    )
+    default Mono<ResponseEntity<Void>> testQueryParameterCollectionFormat(
+        @NotNull @Parameter(name = "pipe", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @Parameter(name = "ioutil", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @Parameter(name = "http", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @Parameter(name = "url", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @Parameter(name = "context", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "context", required = true) List<String> context,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().testQueryParameterCollectionFormat(pipe, ioutil, http, url, context, exchange);
+    }
+
+
+    /**
+     * POST /fake/{petId}/uploadImageWithRequiredFile : uploads an image (required)
+     *
+     * @param petId ID of pet to update (required)
+     * @param requiredFile file to upload (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image (required)",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/{petId}/uploadImageWithRequiredFile",
+        produces = { "application/json" },
+        consumes = { "multipart/form-data" }
+    )
+    default Mono<ResponseEntity<ModelApiResponse>> uploadFileWithRequiredFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "requiredFile", description = "file to upload", required = true, schema = @Schema(description = "")) @RequestPart(value = "requiredFile", required = true) Flux<Part> requiredFile,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().uploadFileWithRequiredFile(petId, requiredFile, additionalMetadata, exchange);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApiController.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b22c1aba661d87a247a82444b1169d1b83913e1
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApiController.java
@@ -0,0 +1,22 @@
+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.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class FakeApiController implements FakeApi {
+
+    private final FakeApiDelegate delegate;
+
+    public FakeApiController(@org.springframework.beans.factory.annotation.Autowired(required = false) FakeApiDelegate delegate) {
+        this.delegate = Optional.ofNullable(delegate).orElse(new FakeApiDelegate() {});
+    }
+
+    @Override
+    public FakeApiDelegate getDelegate() {
+        return delegate;
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApiDelegate.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApiDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..dbe78fa1c7f9d9298887036f1f3dc92e4cad4f6b
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApiDelegate.java
@@ -0,0 +1,363 @@
+package org.openapitools.api;
+
+import java.math.BigDecimal;
+import org.openapitools.model.Client;
+import org.openapitools.model.FileSchemaTestClass;
+import java.time.LocalDate;
+import java.util.Map;
+import org.openapitools.model.ModelApiResponse;
+import java.time.OffsetDateTime;
+import org.openapitools.model.OuterComposite;
+import org.openapitools.model.User;
+import org.openapitools.model.XmlItem;
+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.web.multipart.MultipartFile;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.springframework.http.codec.multipart.Part;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * A delegate to be called by the {@link FakeApiController}}.
+ * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class.
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public interface FakeApiDelegate {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /fake/create_xml_item : creates an XmlItem
+     * this route creates an XmlItem
+     *
+     * @param xmlItem XmlItem Body (required)
+     * @return successful operation (status code 200)
+     * @see FakeApi#createXmlItem
+     */
+    default Mono<ResponseEntity<Void>> createXmlItem(Mono<XmlItem> xmlItem,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * POST /fake/outer/boolean
+     * Test serialization of outer boolean types
+     *
+     * @param body Input boolean as post body (optional)
+     * @return Output boolean (status code 200)
+     * @see FakeApi#fakeOuterBooleanSerialize
+     */
+    default Mono<ResponseEntity<Boolean>> fakeOuterBooleanSerialize(Mono<Boolean> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * POST /fake/outer/composite
+     * Test serialization of object with outer number type
+     *
+     * @param body Input composite as post body (optional)
+     * @return Output composite (status code 200)
+     * @see FakeApi#fakeOuterCompositeSerialize
+     */
+    default Mono<ResponseEntity<OuterComposite>> fakeOuterCompositeSerialize(Mono<OuterComposite> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
+                String exampleString = "{ \"my_string\" : \"my_string\", \"my_number\" : 0.8008281904610115, \"my_boolean\" : true }";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+        }
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * POST /fake/outer/number
+     * Test serialization of outer number types
+     *
+     * @param body Input number as post body (optional)
+     * @return Output number (status code 200)
+     * @see FakeApi#fakeOuterNumberSerialize
+     */
+    default Mono<ResponseEntity<BigDecimal>> fakeOuterNumberSerialize(Mono<BigDecimal> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * POST /fake/outer/string
+     * Test serialization of outer string types
+     *
+     * @param body Input string as post body (optional)
+     * @return Output string (status code 200)
+     * @see FakeApi#fakeOuterStringSerialize
+     */
+    default Mono<ResponseEntity<String>> fakeOuterStringSerialize(Mono<String> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * PUT /fake/body-with-file-schema
+     * For this test, the body for this request much reference a schema named &#x60;File&#x60;.
+     *
+     * @param body  (required)
+     * @return Success (status code 200)
+     * @see FakeApi#testBodyWithFileSchema
+     */
+    default Mono<ResponseEntity<Void>> testBodyWithFileSchema(Mono<FileSchemaTestClass> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * PUT /fake/body-with-query-params
+     *
+     * @param query  (required)
+     * @param body  (required)
+     * @return Success (status code 200)
+     * @see FakeApi#testBodyWithQueryParams
+     */
+    default Mono<ResponseEntity<Void>> testBodyWithQueryParams(String query,
+        Mono<User> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * PATCH /fake : To test \&quot;client\&quot; model
+     * To test \&quot;client\&quot; model
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     * @see FakeApi#testClientModel
+     */
+    default Mono<ResponseEntity<Client>> testClientModel(Mono<Client> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"client\" : \"client\" }";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+        }
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * POST /fake : Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     * Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     *
+     * @param number None (required)
+     * @param _double None (required)
+     * @param patternWithoutDelimiter None (required)
+     * @param _byte None (required)
+     * @param integer None (optional)
+     * @param int32 None (optional)
+     * @param int64 None (optional)
+     * @param _float None (optional)
+     * @param string None (optional)
+     * @param binary None (optional)
+     * @param date None (optional)
+     * @param dateTime None (optional)
+     * @param password None (optional)
+     * @param paramCallback None (optional)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     * @see FakeApi#testEndpointParameters
+     */
+    default Mono<ResponseEntity<Void>> testEndpointParameters(BigDecimal number,
+        Double _double,
+        String patternWithoutDelimiter,
+        byte[] _byte,
+        Integer integer,
+        Integer int32,
+        Long int64,
+        Float _float,
+        String string,
+        Flux<Part> binary,
+        LocalDate date,
+        OffsetDateTime dateTime,
+        String password,
+        String paramCallback,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * GET /fake : To test enum parameters
+     * To test enum parameters
+     *
+     * @param enumHeaderStringArray Header parameter enum test (string array) (optional)
+     * @param enumHeaderString Header parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryStringArray Query parameter enum test (string array) (optional)
+     * @param enumQueryString Query parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryInteger Query parameter enum test (double) (optional)
+     * @param enumQueryDouble Query parameter enum test (double) (optional)
+     * @param enumFormStringArray Form parameter enum test (string array) (optional, default to $)
+     * @param enumFormString Form parameter enum test (string) (optional, default to -efg)
+     * @return Invalid request (status code 400)
+     *         or Not found (status code 404)
+     * @see FakeApi#testEnumParameters
+     */
+    default Mono<ResponseEntity<Void>> testEnumParameters(List<String> enumHeaderStringArray,
+        String enumHeaderString,
+        List<String> enumQueryStringArray,
+        String enumQueryString,
+        Integer enumQueryInteger,
+        Double enumQueryDouble,
+        List<String> enumFormStringArray,
+        String enumFormString,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * DELETE /fake : Fake endpoint to test group parameters (optional)
+     * Fake endpoint to test group parameters (optional)
+     *
+     * @param requiredStringGroup Required String in group parameters (required)
+     * @param requiredBooleanGroup Required Boolean in group parameters (required)
+     * @param requiredInt64Group Required Integer in group parameters (required)
+     * @param stringGroup String in group parameters (optional)
+     * @param booleanGroup Boolean in group parameters (optional)
+     * @param int64Group Integer in group parameters (optional)
+     * @return Someting wrong (status code 400)
+     * @see FakeApi#testGroupParameters
+     */
+    default Mono<ResponseEntity<Void>> testGroupParameters(Integer requiredStringGroup,
+        Boolean requiredBooleanGroup,
+        Long requiredInt64Group,
+        Integer stringGroup,
+        Boolean booleanGroup,
+        Long int64Group,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * POST /fake/inline-additionalProperties : test inline additionalProperties
+     *
+     * @param param request body (required)
+     * @return successful operation (status code 200)
+     * @see FakeApi#testInlineAdditionalProperties
+     */
+    default Mono<ResponseEntity<Void>> testInlineAdditionalProperties(Mono<Map<String, String>> param,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * GET /fake/jsonFormData : test json serialization of form data
+     *
+     * @param param field1 (required)
+     * @param param2 field2 (required)
+     * @return successful operation (status code 200)
+     * @see FakeApi#testJsonFormData
+     */
+    default Mono<ResponseEntity<Void>> testJsonFormData(String param,
+        String param2,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * PUT /fake/test-query-parameters
+     * To test the collection format in query parameters
+     *
+     * @param pipe  (required)
+     * @param ioutil  (required)
+     * @param http  (required)
+     * @param url  (required)
+     * @param context  (required)
+     * @return Success (status code 200)
+     * @see FakeApi#testQueryParameterCollectionFormat
+     */
+    default Mono<ResponseEntity<Void>> testQueryParameterCollectionFormat(List<String> pipe,
+        List<String> ioutil,
+        List<String> http,
+        List<String> url,
+        List<String> context,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * POST /fake/{petId}/uploadImageWithRequiredFile : uploads an image (required)
+     *
+     * @param petId ID of pet to update (required)
+     * @param requiredFile file to upload (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @return successful operation (status code 200)
+     * @see FakeApi#uploadFileWithRequiredFile
+     */
+    default Mono<ResponseEntity<ModelApiResponse>> uploadFileWithRequiredFile(Long petId,
+        Flux<Part> requiredFile,
+        String additionalMetadata,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+        }
+        return result.then(Mono.empty());
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..229cba518a2a565931cd345a701650ad1dd02160
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -0,0 +1,69 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.springframework.http.codec.multipart.Part;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "fake_classname_test", description = "the fake_classname_test API")
+public interface FakeClassnameTestApi {
+
+    default FakeClassnameTestApiDelegate getDelegate() {
+        return new FakeClassnameTestApiDelegate() {};
+    }
+
+    /**
+     * PATCH /fake_classname_test : To test class name in snake case
+     * To test class name in snake case
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test class name in snake case",
+        tags = { "fake_classname_tags 123#$%^" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key_query")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/fake_classname_test",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    default Mono<ResponseEntity<Client>> testClassname(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Mono<Client> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().testClassname(body, exchange);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..58497641e4c525da4e41dbd5351fd206f512ac50
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
@@ -0,0 +1,22 @@
+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.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class FakeClassnameTestApiController implements FakeClassnameTestApi {
+
+    private final FakeClassnameTestApiDelegate delegate;
+
+    public FakeClassnameTestApiController(@org.springframework.beans.factory.annotation.Autowired(required = false) FakeClassnameTestApiDelegate delegate) {
+        this.delegate = Optional.ofNullable(delegate).orElse(new FakeClassnameTestApiDelegate() {});
+    }
+
+    @Override
+    public FakeClassnameTestApiDelegate getDelegate() {
+        return delegate;
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..4127d96d9e3e4d008682c6b7c20b1aa6b2f1ae46
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
@@ -0,0 +1,52 @@
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+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.web.multipart.MultipartFile;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.springframework.http.codec.multipart.Part;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * A delegate to be called by the {@link FakeClassnameTestApiController}}.
+ * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class.
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public interface FakeClassnameTestApiDelegate {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * PATCH /fake_classname_test : To test class name in snake case
+     * To test class name in snake case
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     * @see FakeClassnameTestApi#testClassname
+     */
+    default Mono<ResponseEntity<Client>> testClassname(Mono<Client> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"client\" : \"client\" }";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+        }
+        return result.then(Mono.empty());
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..150f20d9401e384d1a8b9adda9748f3bdc9c8573
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java
@@ -0,0 +1,304 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.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 java.util.Set;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.springframework.http.codec.multipart.Part;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "pet", description = "the pet API")
+public interface PetApi {
+
+    default PetApiDelegate getDelegate() {
+        return new PetApiDelegate() {};
+    }
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Add a new pet to the store",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet",
+        consumes = { "application/json", "application/xml" }
+    )
+    default Mono<ResponseEntity<Void>> addPet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Mono<Pet> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().addPet(body, exchange);
+    }
+
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @param apiKey  (optional)
+     * @return successful operation (status code 200)
+     *         or Invalid pet value (status code 400)
+     */
+    @Operation(
+        summary = "Deletes a pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "400", description = "Invalid pet value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/pet/{petId}"
+    )
+    default Mono<ResponseEntity<Void>> deletePet(
+        @Parameter(name = "petId", description = "Pet id to delete", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "api_key", description = "", schema = @Schema(description = "")) @RequestHeader(value = "api_key", required = false) String apiKey,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().deletePet(petId, apiKey, exchange);
+    }
+
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     */
+    @Operation(
+        summary = "Finds Pets by status",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid status value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByStatus",
+        produces = { "application/xml", "application/json" }
+    )
+    default Mono<ResponseEntity<Flux<Pet>>> findPetsByStatus(
+        @NotNull @Parameter(name = "status", description = "Status values that need to be considered for filter", required = true, schema = @Schema(description = "", allowableValues = { "available", "pending", "sold" })) @Valid @RequestParam(value = "status", required = true) List<String> status,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().findPetsByStatus(status, exchange);
+    }
+
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     */
+    @Operation(
+        summary = "Finds Pets by tags",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid tag value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByTags",
+        produces = { "application/xml", "application/json" }
+    )
+    default Mono<ResponseEntity<Flux<Pet>>> findPetsByTags(
+        @NotNull @Parameter(name = "tags", description = "Tags to filter by", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "tags", required = true) Set<String> tags,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().findPetsByTags(tags, exchange);
+    }
+
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     */
+    @Operation(
+        summary = "Find pet by ID",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/{petId}",
+        produces = { "application/xml", "application/json" }
+    )
+    default Mono<ResponseEntity<Pet>> getPetById(
+        @Parameter(name = "petId", description = "ID of pet to return", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().getPetById(petId, exchange);
+    }
+
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     */
+    @Operation(
+        summary = "Update an existing pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found"),
+            @ApiResponse(responseCode = "405", description = "Validation exception")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/pet",
+        consumes = { "application/json", "application/xml" }
+    )
+    default Mono<ResponseEntity<Void>> updatePet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Mono<Pet> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().updatePet(body, exchange);
+    }
+
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Updates a pet in the store with form data",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default Mono<ResponseEntity<Void>> updatePetWithForm(
+        @Parameter(name = "petId", description = "ID of pet that needs to be updated", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "name", description = "Updated name of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "name", required = false) String name,
+        @Parameter(name = "status", description = "Updated status of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "status", required = false) String status,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().updatePetWithForm(petId, name, status, exchange);
+    }
+
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}/uploadImage",
+        produces = { "application/json" },
+        consumes = { "multipart/form-data" }
+    )
+    default Mono<ResponseEntity<ModelApiResponse>> uploadFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @Parameter(name = "file", description = "file to upload", schema = @Schema(description = "")) @RequestPart(value = "file", required = false) Flux<Part> file,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().uploadFile(petId, additionalMetadata, file, exchange);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApiController.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fa088c6f10ba19b5525939d6a75c8e12db2e648
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApiController.java
@@ -0,0 +1,22 @@
+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.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class PetApiController implements PetApi {
+
+    private final PetApiDelegate delegate;
+
+    public PetApiController(@org.springframework.beans.factory.annotation.Autowired(required = false) PetApiDelegate delegate) {
+        this.delegate = Optional.ofNullable(delegate).orElse(new PetApiDelegate() {});
+    }
+
+    @Override
+    public PetApiDelegate getDelegate() {
+        return delegate;
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApiDelegate.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApiDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..8dc1be776ea0034d2cfc8e416cb5c98c86d6be57
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApiDelegate.java
@@ -0,0 +1,217 @@
+package org.openapitools.api;
+
+import org.openapitools.model.ModelApiResponse;
+import org.openapitools.model.Pet;
+import java.util.Set;
+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.web.multipart.MultipartFile;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.springframework.http.codec.multipart.Part;
+
+import java.util.List;
+import java.util.Map;
+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.SpringCodegen")
+public interface PetApiDelegate {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid input (status code 405)
+     * @see PetApi#addPet
+     */
+    default Mono<ResponseEntity<Void>> addPet(Mono<Pet> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @param apiKey  (optional)
+     * @return successful operation (status code 200)
+     *         or Invalid pet value (status code 400)
+     * @see PetApi#deletePet
+     */
+    default Mono<ResponseEntity<Void>> deletePet(Long petId,
+        String apiKey,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     * @see PetApi#findPetsByStatus
+     */
+    default Mono<ResponseEntity<Flux<Pet>>> findPetsByStatus(List<String> status,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+        }
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     * @see PetApi#findPetsByTags
+     */
+    default Mono<ResponseEntity<Flux<Pet>>> findPetsByTags(Set<String> tags,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+        }
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     * @see PetApi#getPetById
+     */
+    default Mono<ResponseEntity<Pet>> getPetById(Long petId,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+        }
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     * @see PetApi#updatePet
+     */
+    default Mono<ResponseEntity<Void>> updatePet(Mono<Pet> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     * @see PetApi#updatePetWithForm
+     */
+    default Mono<ResponseEntity<Void>> updatePetWithForm(Long petId,
+        String name,
+        String status,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     * @see PetApi#uploadFile
+     */
+    default Mono<ResponseEntity<ModelApiResponse>> uploadFile(Long petId,
+        String additionalMetadata,
+        Flux<Part> file,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+        }
+        return result.then(Mono.empty());
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..056bfb145d453216498313e54d986dd2fbe27630
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java
@@ -0,0 +1,154 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.Map;
+import org.openapitools.model.Order;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.springframework.http.codec.multipart.Part;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "store", description = "the store API")
+public interface StoreApi {
+
+    default StoreApiDelegate getDelegate() {
+        return new StoreApiDelegate() {};
+    }
+
+    /**
+     * DELETE /store/order/{order_id} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/store/order/{order_id}"
+    )
+    default Mono<ResponseEntity<Void>> deleteOrder(
+        @Parameter(name = "order_id", description = "ID of the order that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("order_id") String orderId,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().deleteOrder(orderId, exchange);
+    }
+
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Returns pet inventories by status",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Map.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/inventory",
+        produces = { "application/json" }
+    )
+    default Mono<ResponseEntity<Map<String, Integer>>> getInventory(
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().getInventory(exchange);
+    }
+
+
+    /**
+     * GET /store/order/{order_id} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Find purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/order/{order_id}",
+        produces = { "application/xml", "application/json" }
+    )
+    default Mono<ResponseEntity<Order>> getOrderById(
+        @Min(1L) @Max(5L) @Parameter(name = "order_id", description = "ID of pet that needs to be fetched", required = true, schema = @Schema(description = "")) @PathVariable("order_id") Long orderId,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().getOrderById(orderId, exchange);
+    }
+
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param body order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     */
+    @Operation(
+        summary = "Place an order for a pet",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid Order")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/store/order",
+        produces = { "application/xml", "application/json" }
+    )
+    default Mono<ResponseEntity<Order>> placeOrder(
+        @Parameter(name = "body", description = "order placed for purchasing the pet", required = true, schema = @Schema(description = "")) @Valid @RequestBody Mono<Order> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().placeOrder(body, exchange);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApiController.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..9e08c646ae924c379c0560e6f27eeda5f88ccbe7
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApiController.java
@@ -0,0 +1,22 @@
+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.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class StoreApiController implements StoreApi {
+
+    private final StoreApiDelegate delegate;
+
+    public StoreApiController(@org.springframework.beans.factory.annotation.Autowired(required = false) StoreApiDelegate delegate) {
+        this.delegate = Optional.ofNullable(delegate).orElse(new StoreApiDelegate() {});
+    }
+
+    @Override
+    public StoreApiDelegate getDelegate() {
+        return delegate;
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApiDelegate.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApiDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..02daadf024a1ddabbd6ab8c3f4a3d2363f1b63b5
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApiDelegate.java
@@ -0,0 +1,119 @@
+package org.openapitools.api;
+
+import java.util.Map;
+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.web.multipart.MultipartFile;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.springframework.http.codec.multipart.Part;
+
+import java.util.List;
+import java.util.Map;
+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.SpringCodegen")
+public interface StoreApiDelegate {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * DELETE /store/order/{order_id} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     * @see StoreApi#deleteOrder
+     */
+    default Mono<ResponseEntity<Void>> deleteOrder(String orderId,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     * @see StoreApi#getInventory
+     */
+    default Mono<ResponseEntity<Map<String, Integer>>> getInventory(ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * GET /store/order/{order_id} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     * @see StoreApi#getOrderById
+     */
+    default Mono<ResponseEntity<Order>> getOrderById(Long orderId,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                String exampleString = "<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>";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+        }
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param body order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     * @see StoreApi#placeOrder
+     */
+    default Mono<ResponseEntity<Order>> placeOrder(Mono<Order> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                String exampleString = "<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>";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+        }
+        return result.then(Mono.empty());
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..1bdbac92e64c6d92953b42cc94bbff276461f9a9
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java
@@ -0,0 +1,257 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.List;
+import java.time.OffsetDateTime;
+import org.openapitools.model.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.springframework.http.codec.multipart.Part;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "user", description = "the user API")
+public interface UserApi {
+
+    default UserApiDelegate getDelegate() {
+        return new UserApiDelegate() {};
+    }
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param body Created user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Create user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user"
+    )
+    default Mono<ResponseEntity<Void>> createUser(
+        @Parameter(name = "body", description = "Created user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody Mono<User> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().createUser(body, exchange);
+    }
+
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithArray"
+    )
+    default Mono<ResponseEntity<Void>> createUsersWithArrayInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody Flux<User> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().createUsersWithArrayInput(body, exchange);
+    }
+
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithList"
+    )
+    default Mono<ResponseEntity<Void>> createUsersWithListInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody Flux<User> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().createUsersWithListInput(body, exchange);
+    }
+
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/user/{username}"
+    )
+    default Mono<ResponseEntity<Void>> deleteUser(
+        @Parameter(name = "username", description = "The name that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().deleteUser(username, exchange);
+    }
+
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Get user by user name",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  User.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/{username}",
+        produces = { "application/xml", "application/json" }
+    )
+    default Mono<ResponseEntity<User>> getUserByName(
+        @Parameter(name = "username", description = "The name that needs to be fetched. Use user1 for testing.", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().getUserByName(username, exchange);
+    }
+
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     */
+    @Operation(
+        summary = "Logs user into the system",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username/password supplied")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/login",
+        produces = { "application/xml", "application/json" }
+    )
+    default Mono<ResponseEntity<String>> loginUser(
+        @NotNull @Parameter(name = "username", description = "The user name for login", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @Parameter(name = "password", description = "The password for login in clear text", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "password", required = true) String password,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().loginUser(username, password, exchange);
+    }
+
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Logs out current logged in user session",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/logout"
+    )
+    default Mono<ResponseEntity<Void>> logoutUser(
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().logoutUser(exchange);
+    }
+
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param body Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Updated user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid user supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/user/{username}"
+    )
+    default Mono<ResponseEntity<Void>> updateUser(
+        @Parameter(name = "username", description = "name that need to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(name = "body", description = "Updated user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody Mono<User> body,
+        @Parameter(hidden = true) final ServerWebExchange exchange
+    ) {
+        return getDelegate().updateUser(username, body, exchange);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApiController.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..bc2d33598fd9a90f8b68cf033eaafc550c632f09
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApiController.java
@@ -0,0 +1,22 @@
+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.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class UserApiController implements UserApi {
+
+    private final UserApiDelegate delegate;
+
+    public UserApiController(@org.springframework.beans.factory.annotation.Autowired(required = false) UserApiDelegate delegate) {
+        this.delegate = Optional.ofNullable(delegate).orElse(new UserApiDelegate() {});
+    }
+
+    @Override
+    public UserApiDelegate getDelegate() {
+        return delegate;
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApiDelegate.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApiDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..3985dd30ecdf269653c0451e6c873a00879b092b
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApiDelegate.java
@@ -0,0 +1,173 @@
+package org.openapitools.api;
+
+import java.util.List;
+import java.time.OffsetDateTime;
+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.web.multipart.MultipartFile;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import org.springframework.http.codec.multipart.Part;
+
+import java.util.List;
+import java.util.Map;
+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.SpringCodegen")
+public interface UserApiDelegate {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param body Created user object (required)
+     * @return successful operation (status code 200)
+     * @see UserApi#createUser
+     */
+    default Mono<ResponseEntity<Void>> createUser(Mono<User> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     * @see UserApi#createUsersWithArrayInput
+     */
+    default Mono<ResponseEntity<Void>> createUsersWithArrayInput(Flux<User> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     * @see UserApi#createUsersWithListInput
+     */
+    default Mono<ResponseEntity<Void>> createUsersWithListInput(Flux<User> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     * @see UserApi#deleteUser
+     */
+    default Mono<ResponseEntity<Void>> deleteUser(String username,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     * @see UserApi#getUserByName
+     */
+    default Mono<ResponseEntity<User>> getUserByName(String username,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        for (MediaType mediaType : exchange.getRequest().getHeaders().getAccept()) {
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                String exampleString = "{ \"firstName\" : \"firstName\", \"lastName\" : \"lastName\", \"password\" : \"password\", \"userStatus\" : 6, \"phone\" : \"phone\", \"id\" : 0, \"email\" : \"email\", \"username\" : \"username\" }";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+            if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                String exampleString = "<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>";
+                result = ApiUtil.getExampleResponse(exchange, mediaType, exampleString);
+                break;
+            }
+        }
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     * @see UserApi#loginUser
+     */
+    default Mono<ResponseEntity<String>> loginUser(String username,
+        String password,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     * @see UserApi#logoutUser
+     */
+    default Mono<ResponseEntity<Void>> logoutUser(ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param body Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     * @see UserApi#updateUser
+     */
+    default Mono<ResponseEntity<Void>> updateUser(String username,
+        Mono<User> body,
+        ServerWebExchange exchange) {
+        Mono<Void> result = Mono.empty();
+        exchange.getResponse().setStatusCode(HttpStatus.NOT_IMPLEMENTED);
+        return result.then(Mono.empty());
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/configuration/HomeController.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/configuration/HomeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1e5bfc21ee5e89de016d6350bf090bc4985c7ef
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/configuration/HomeController.java
@@ -0,0 +1,62 @@
+package org.openapitools.configuration;
+
+import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.io.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StreamUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.reactive.function.server.RouterFunction;
+import org.springframework.web.reactive.function.server.ServerResponse;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.nio.charset.Charset;
+
+import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
+import static org.springframework.web.reactive.function.server.RouterFunctions.route;
+
+/**
+ * Home redirection to OpenAPI api documentation
+ */
+@Controller
+public class HomeController {
+
+    private static YAMLMapper yamlMapper = new YAMLMapper();
+
+    @Value("classpath:/openapi.yaml")
+    private Resource openapi;
+
+    @Bean
+    public String openapiContent() throws IOException {
+        try(InputStream is = openapi.getInputStream()) {
+            return StreamUtils.copyToString(is, Charset.defaultCharset());
+        }
+    }
+
+    @GetMapping(value = "/openapi.yaml", produces = "application/vnd.oai.openapi")
+    @ResponseBody
+    public String openapiYaml() throws IOException {
+        return openapiContent();
+    }
+
+    @GetMapping(value = "/openapi.json", produces = "application/json")
+    @ResponseBody
+    public Object openapiJson() throws IOException {
+        return yamlMapper.readValue(openapiContent(), Object.class);
+    }
+
+    @Bean
+    RouterFunction<ServerResponse> index() {
+        return route(
+            GET("/"),
+            req -> ServerResponse.temporaryRedirect(URI.create("swagger-ui/index.html?url=../openapi.json")).build()
+        );
+    }
+
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c57ae7dd14cea1acd9607d0e392dd2c79257878
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesAnyType
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesAnyType extends HashMap<String, Object>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesAnyType name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesAnyType additionalPropertiesAnyType = (AdditionalPropertiesAnyType) o;
+    return Objects.equals(this.name, additionalPropertiesAnyType.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesAnyType {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5285ec2f29bb31bba95fcaef6e06e815e1101b7
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
@@ -0,0 +1,87 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesArray
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesArray extends HashMap<String, List>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesArray name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesArray additionalPropertiesArray = (AdditionalPropertiesArray) o;
+    return Objects.equals(this.name, additionalPropertiesArray.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesArray {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8ca38c286d5ac22136574721e512776c68b780d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesBoolean
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesBoolean extends HashMap<String, Boolean>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesBoolean name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesBoolean additionalPropertiesBoolean = (AdditionalPropertiesBoolean) o;
+    return Objects.equals(this.name, additionalPropertiesBoolean.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesBoolean {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfd28ccb99637972f69d4653e63a17496210d34b
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
@@ -0,0 +1,414 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesClass   {
+  @JsonProperty("map_string")
+  @Valid
+  private Map<String, String> mapString = null;
+
+  @JsonProperty("map_number")
+  @Valid
+  private Map<String, BigDecimal> mapNumber = null;
+
+  @JsonProperty("map_integer")
+  @Valid
+  private Map<String, Integer> mapInteger = null;
+
+  @JsonProperty("map_boolean")
+  @Valid
+  private Map<String, Boolean> mapBoolean = null;
+
+  @JsonProperty("map_array_integer")
+  @Valid
+  private Map<String, List<Integer>> mapArrayInteger = null;
+
+  @JsonProperty("map_array_anytype")
+  @Valid
+  private Map<String, List<Object>> mapArrayAnytype = null;
+
+  @JsonProperty("map_map_string")
+  @Valid
+  private Map<String, Map<String, String>> mapMapString = null;
+
+  @JsonProperty("map_map_anytype")
+  @Valid
+  private Map<String, Map<String, Object>> mapMapAnytype = null;
+
+  @JsonProperty("anytype_1")
+  private Object anytype1;
+
+  @JsonProperty("anytype_2")
+  private Object anytype2;
+
+  @JsonProperty("anytype_3")
+  private Object anytype3;
+
+  public AdditionalPropertiesClass mapString(Map<String, String> mapString) {
+    this.mapString = mapString;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapStringItem(String key, String mapStringItem) {
+    if (this.mapString == null) {
+      this.mapString = new HashMap<>();
+    }
+    this.mapString.put(key, mapStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapString
+   * @return mapString
+  */
+  @Schema(name = "mapString", defaultValue = "")
+
+
+  public Map<String, String> getMapString() {
+    return mapString;
+  }
+
+  public void setMapString(Map<String, String> mapString) {
+    this.mapString = mapString;
+  }
+
+  public AdditionalPropertiesClass mapNumber(Map<String, BigDecimal> mapNumber) {
+    this.mapNumber = mapNumber;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapNumberItem(String key, BigDecimal mapNumberItem) {
+    if (this.mapNumber == null) {
+      this.mapNumber = new HashMap<>();
+    }
+    this.mapNumber.put(key, mapNumberItem);
+    return this;
+  }
+
+  /**
+   * Get mapNumber
+   * @return mapNumber
+  */
+  @Schema(name = "mapNumber", defaultValue = "")
+
+  @Valid
+
+  public Map<String, BigDecimal> getMapNumber() {
+    return mapNumber;
+  }
+
+  public void setMapNumber(Map<String, BigDecimal> mapNumber) {
+    this.mapNumber = mapNumber;
+  }
+
+  public AdditionalPropertiesClass mapInteger(Map<String, Integer> mapInteger) {
+    this.mapInteger = mapInteger;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapIntegerItem(String key, Integer mapIntegerItem) {
+    if (this.mapInteger == null) {
+      this.mapInteger = new HashMap<>();
+    }
+    this.mapInteger.put(key, mapIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get mapInteger
+   * @return mapInteger
+  */
+  @Schema(name = "mapInteger", defaultValue = "")
+
+
+  public Map<String, Integer> getMapInteger() {
+    return mapInteger;
+  }
+
+  public void setMapInteger(Map<String, Integer> mapInteger) {
+    this.mapInteger = mapInteger;
+  }
+
+  public AdditionalPropertiesClass mapBoolean(Map<String, Boolean> mapBoolean) {
+    this.mapBoolean = mapBoolean;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapBooleanItem(String key, Boolean mapBooleanItem) {
+    if (this.mapBoolean == null) {
+      this.mapBoolean = new HashMap<>();
+    }
+    this.mapBoolean.put(key, mapBooleanItem);
+    return this;
+  }
+
+  /**
+   * Get mapBoolean
+   * @return mapBoolean
+  */
+  @Schema(name = "mapBoolean", defaultValue = "")
+
+
+  public Map<String, Boolean> getMapBoolean() {
+    return mapBoolean;
+  }
+
+  public void setMapBoolean(Map<String, Boolean> mapBoolean) {
+    this.mapBoolean = mapBoolean;
+  }
+
+  public AdditionalPropertiesClass mapArrayInteger(Map<String, List<Integer>> mapArrayInteger) {
+    this.mapArrayInteger = mapArrayInteger;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapArrayIntegerItem(String key, List<Integer> mapArrayIntegerItem) {
+    if (this.mapArrayInteger == null) {
+      this.mapArrayInteger = new HashMap<>();
+    }
+    this.mapArrayInteger.put(key, mapArrayIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get mapArrayInteger
+   * @return mapArrayInteger
+  */
+  @Schema(name = "mapArrayInteger", defaultValue = "")
+
+  @Valid
+
+  public Map<String, List<Integer>> getMapArrayInteger() {
+    return mapArrayInteger;
+  }
+
+  public void setMapArrayInteger(Map<String, List<Integer>> mapArrayInteger) {
+    this.mapArrayInteger = mapArrayInteger;
+  }
+
+  public AdditionalPropertiesClass mapArrayAnytype(Map<String, List<Object>> mapArrayAnytype) {
+    this.mapArrayAnytype = mapArrayAnytype;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapArrayAnytypeItem(String key, List<Object> mapArrayAnytypeItem) {
+    if (this.mapArrayAnytype == null) {
+      this.mapArrayAnytype = new HashMap<>();
+    }
+    this.mapArrayAnytype.put(key, mapArrayAnytypeItem);
+    return this;
+  }
+
+  /**
+   * Get mapArrayAnytype
+   * @return mapArrayAnytype
+  */
+  @Schema(name = "mapArrayAnytype", defaultValue = "")
+
+  @Valid
+
+  public Map<String, List<Object>> getMapArrayAnytype() {
+    return mapArrayAnytype;
+  }
+
+  public void setMapArrayAnytype(Map<String, List<Object>> mapArrayAnytype) {
+    this.mapArrayAnytype = mapArrayAnytype;
+  }
+
+  public AdditionalPropertiesClass mapMapString(Map<String, Map<String, String>> mapMapString) {
+    this.mapMapString = mapMapString;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapMapStringItem(String key, Map<String, String> mapMapStringItem) {
+    if (this.mapMapString == null) {
+      this.mapMapString = new HashMap<>();
+    }
+    this.mapMapString.put(key, mapMapStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapString
+   * @return mapMapString
+  */
+  @Schema(name = "mapMapString", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, String>> getMapMapString() {
+    return mapMapString;
+  }
+
+  public void setMapMapString(Map<String, Map<String, String>> mapMapString) {
+    this.mapMapString = mapMapString;
+  }
+
+  public AdditionalPropertiesClass mapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
+    this.mapMapAnytype = mapMapAnytype;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapMapAnytypeItem(String key, Map<String, Object> mapMapAnytypeItem) {
+    if (this.mapMapAnytype == null) {
+      this.mapMapAnytype = new HashMap<>();
+    }
+    this.mapMapAnytype.put(key, mapMapAnytypeItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapAnytype
+   * @return mapMapAnytype
+  */
+  @Schema(name = "mapMapAnytype", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, Object>> getMapMapAnytype() {
+    return mapMapAnytype;
+  }
+
+  public void setMapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
+    this.mapMapAnytype = mapMapAnytype;
+  }
+
+  public AdditionalPropertiesClass anytype1(Object anytype1) {
+    this.anytype1 = anytype1;
+    return this;
+  }
+
+  /**
+   * Get anytype1
+   * @return anytype1
+  */
+  @Schema(name = "anytype1", defaultValue = "")
+
+
+  public Object getAnytype1() {
+    return anytype1;
+  }
+
+  public void setAnytype1(Object anytype1) {
+    this.anytype1 = anytype1;
+  }
+
+  public AdditionalPropertiesClass anytype2(Object anytype2) {
+    this.anytype2 = anytype2;
+    return this;
+  }
+
+  /**
+   * Get anytype2
+   * @return anytype2
+  */
+  @Schema(name = "anytype2", defaultValue = "")
+
+
+  public Object getAnytype2() {
+    return anytype2;
+  }
+
+  public void setAnytype2(Object anytype2) {
+    this.anytype2 = anytype2;
+  }
+
+  public AdditionalPropertiesClass anytype3(Object anytype3) {
+    this.anytype3 = anytype3;
+    return this;
+  }
+
+  /**
+   * Get anytype3
+   * @return anytype3
+  */
+  @Schema(name = "anytype3", defaultValue = "")
+
+
+  public Object getAnytype3() {
+    return anytype3;
+  }
+
+  public void setAnytype3(Object anytype3) {
+    this.anytype3 = anytype3;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesClass additionalPropertiesClass = (AdditionalPropertiesClass) o;
+    return Objects.equals(this.mapString, additionalPropertiesClass.mapString) &&
+        Objects.equals(this.mapNumber, additionalPropertiesClass.mapNumber) &&
+        Objects.equals(this.mapInteger, additionalPropertiesClass.mapInteger) &&
+        Objects.equals(this.mapBoolean, additionalPropertiesClass.mapBoolean) &&
+        Objects.equals(this.mapArrayInteger, additionalPropertiesClass.mapArrayInteger) &&
+        Objects.equals(this.mapArrayAnytype, additionalPropertiesClass.mapArrayAnytype) &&
+        Objects.equals(this.mapMapString, additionalPropertiesClass.mapMapString) &&
+        Objects.equals(this.mapMapAnytype, additionalPropertiesClass.mapMapAnytype) &&
+        Objects.equals(this.anytype1, additionalPropertiesClass.anytype1) &&
+        Objects.equals(this.anytype2, additionalPropertiesClass.anytype2) &&
+        Objects.equals(this.anytype3, additionalPropertiesClass.anytype3);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(mapString, mapNumber, mapInteger, mapBoolean, mapArrayInteger, mapArrayAnytype, mapMapString, mapMapAnytype, anytype1, anytype2, anytype3);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesClass {\n");
+    
+    sb.append("    mapString: ").append(toIndentedString(mapString)).append("\n");
+    sb.append("    mapNumber: ").append(toIndentedString(mapNumber)).append("\n");
+    sb.append("    mapInteger: ").append(toIndentedString(mapInteger)).append("\n");
+    sb.append("    mapBoolean: ").append(toIndentedString(mapBoolean)).append("\n");
+    sb.append("    mapArrayInteger: ").append(toIndentedString(mapArrayInteger)).append("\n");
+    sb.append("    mapArrayAnytype: ").append(toIndentedString(mapArrayAnytype)).append("\n");
+    sb.append("    mapMapString: ").append(toIndentedString(mapMapString)).append("\n");
+    sb.append("    mapMapAnytype: ").append(toIndentedString(mapMapAnytype)).append("\n");
+    sb.append("    anytype1: ").append(toIndentedString(anytype1)).append("\n");
+    sb.append("    anytype2: ").append(toIndentedString(anytype2)).append("\n");
+    sb.append("    anytype3: ").append(toIndentedString(anytype3)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fea577ab44bc610a5b2f663c9424ca16e773b02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesInteger
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesInteger extends HashMap<String, Integer>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesInteger name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesInteger additionalPropertiesInteger = (AdditionalPropertiesInteger) o;
+    return Objects.equals(this.name, additionalPropertiesInteger.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesInteger {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6eee612a24fecb0da4e4e2cddb8c7d68ef42534
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
@@ -0,0 +1,87 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesNumber
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesNumber extends HashMap<String, BigDecimal>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesNumber name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesNumber additionalPropertiesNumber = (AdditionalPropertiesNumber) o;
+    return Objects.equals(this.name, additionalPropertiesNumber.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesNumber {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7116bd7572cef9114d1110e4f546295b5fb9b25
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesObject
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesObject extends HashMap<String, Map>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesObject name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesObject additionalPropertiesObject = (AdditionalPropertiesObject) o;
+    return Objects.equals(this.name, additionalPropertiesObject.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesObject {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesString.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2022be266fbf1947c18de4430af4faa605595f3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesString
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesString extends HashMap<String, String>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesString name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesString additionalPropertiesString = (AdditionalPropertiesString) o;
+    return Objects.equals(this.name, additionalPropertiesString.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesString {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Animal.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Animal.java
new file mode 100644
index 0000000000000000000000000000000000000000..6f096d5069edf4f60558ff11cd2b2f1902eda228
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Animal.java
@@ -0,0 +1,118 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Animal
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "className", visible = true)
+@JsonSubTypes({
+  @JsonSubTypes.Type(value = BigCat.class, name = "BigCat"),
+  @JsonSubTypes.Type(value = Cat.class, name = "Cat"),
+  @JsonSubTypes.Type(value = Dog.class, name = "Dog"),
+})
+
+public class Animal   {
+  @JsonProperty("className")
+  private String className;
+
+  @JsonProperty("color")
+  private String color = "red";
+
+  public Animal className(String className) {
+    this.className = className;
+    return this;
+  }
+
+  /**
+   * Get className
+   * @return className
+  */
+  @Schema(name = "className", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getClassName() {
+    return className;
+  }
+
+  public void setClassName(String className) {
+    this.className = className;
+  }
+
+  public Animal color(String color) {
+    this.color = color;
+    return this;
+  }
+
+  /**
+   * Get color
+   * @return color
+  */
+  @Schema(name = "color", defaultValue = "")
+
+
+  public String getColor() {
+    return color;
+  }
+
+  public void setColor(String color) {
+    this.color = color;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Animal animal = (Animal) o;
+    return Objects.equals(this.className, animal.className) &&
+        Objects.equals(this.color, animal.color);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(className, color);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Animal {\n");
+    
+    sb.append("    className: ").append(toIndentedString(className)).append("\n");
+    sb.append("    color: ").append(toIndentedString(color)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebe36ad761a9c112d97adf5f724aea0cfd556975
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
@@ -0,0 +1,96 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayOfArrayOfNumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfArrayOfNumberOnly   {
+  @JsonProperty("ArrayArrayNumber")
+  @Valid
+  private List<List<BigDecimal>> arrayArrayNumber = null;
+
+  public ArrayOfArrayOfNumberOnly arrayArrayNumber(List<List<BigDecimal>> arrayArrayNumber) {
+    this.arrayArrayNumber = arrayArrayNumber;
+    return this;
+  }
+
+  public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List<BigDecimal> arrayArrayNumberItem) {
+    if (this.arrayArrayNumber == null) {
+      this.arrayArrayNumber = new ArrayList<>();
+    }
+    this.arrayArrayNumber.add(arrayArrayNumberItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayNumber
+   * @return arrayArrayNumber
+  */
+  @Schema(name = "arrayArrayNumber", defaultValue = "")
+
+  @Valid
+
+  public List<List<BigDecimal>> getArrayArrayNumber() {
+    return arrayArrayNumber;
+  }
+
+  public void setArrayArrayNumber(List<List<BigDecimal>> arrayArrayNumber) {
+    this.arrayArrayNumber = arrayArrayNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayOfArrayOfNumberOnly arrayOfArrayOfNumberOnly = (ArrayOfArrayOfNumberOnly) o;
+    return Objects.equals(this.arrayArrayNumber, arrayOfArrayOfNumberOnly.arrayArrayNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayArrayNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayOfArrayOfNumberOnly {\n");
+    
+    sb.append("    arrayArrayNumber: ").append(toIndentedString(arrayArrayNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..8158dd44ab88aaf69dd18b4c136ff094d8e33b02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
@@ -0,0 +1,96 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayOfNumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfNumberOnly   {
+  @JsonProperty("ArrayNumber")
+  @Valid
+  private List<BigDecimal> arrayNumber = null;
+
+  public ArrayOfNumberOnly arrayNumber(List<BigDecimal> arrayNumber) {
+    this.arrayNumber = arrayNumber;
+    return this;
+  }
+
+  public ArrayOfNumberOnly addArrayNumberItem(BigDecimal arrayNumberItem) {
+    if (this.arrayNumber == null) {
+      this.arrayNumber = new ArrayList<>();
+    }
+    this.arrayNumber.add(arrayNumberItem);
+    return this;
+  }
+
+  /**
+   * Get arrayNumber
+   * @return arrayNumber
+  */
+  @Schema(name = "arrayNumber", defaultValue = "")
+
+  @Valid
+
+  public List<BigDecimal> getArrayNumber() {
+    return arrayNumber;
+  }
+
+  public void setArrayNumber(List<BigDecimal> arrayNumber) {
+    this.arrayNumber = arrayNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayOfNumberOnly arrayOfNumberOnly = (ArrayOfNumberOnly) o;
+    return Objects.equals(this.arrayNumber, arrayOfNumberOnly.arrayNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayOfNumberOnly {\n");
+    
+    sb.append("    arrayNumber: ").append(toIndentedString(arrayNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ArrayTest.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ArrayTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..420010561bcde88cb30eda512eb9fb4ca45779ac
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ArrayTest.java
@@ -0,0 +1,165 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.model.ReadOnlyFirst;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayTest   {
+  @JsonProperty("array_of_string")
+  @Valid
+  private List<String> arrayOfString = null;
+
+  @JsonProperty("array_array_of_integer")
+  @Valid
+  private List<List<Long>> arrayArrayOfInteger = null;
+
+  @JsonProperty("array_array_of_model")
+  @Valid
+  private List<List<ReadOnlyFirst>> arrayArrayOfModel = null;
+
+  public ArrayTest arrayOfString(List<String> arrayOfString) {
+    this.arrayOfString = arrayOfString;
+    return this;
+  }
+
+  public ArrayTest addArrayOfStringItem(String arrayOfStringItem) {
+    if (this.arrayOfString == null) {
+      this.arrayOfString = new ArrayList<>();
+    }
+    this.arrayOfString.add(arrayOfStringItem);
+    return this;
+  }
+
+  /**
+   * Get arrayOfString
+   * @return arrayOfString
+  */
+  @Schema(name = "arrayOfString", defaultValue = "")
+
+
+  public List<String> getArrayOfString() {
+    return arrayOfString;
+  }
+
+  public void setArrayOfString(List<String> arrayOfString) {
+    this.arrayOfString = arrayOfString;
+  }
+
+  public ArrayTest arrayArrayOfInteger(List<List<Long>> arrayArrayOfInteger) {
+    this.arrayArrayOfInteger = arrayArrayOfInteger;
+    return this;
+  }
+
+  public ArrayTest addArrayArrayOfIntegerItem(List<Long> arrayArrayOfIntegerItem) {
+    if (this.arrayArrayOfInteger == null) {
+      this.arrayArrayOfInteger = new ArrayList<>();
+    }
+    this.arrayArrayOfInteger.add(arrayArrayOfIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayOfInteger
+   * @return arrayArrayOfInteger
+  */
+  @Schema(name = "arrayArrayOfInteger", defaultValue = "")
+
+  @Valid
+
+  public List<List<Long>> getArrayArrayOfInteger() {
+    return arrayArrayOfInteger;
+  }
+
+  public void setArrayArrayOfInteger(List<List<Long>> arrayArrayOfInteger) {
+    this.arrayArrayOfInteger = arrayArrayOfInteger;
+  }
+
+  public ArrayTest arrayArrayOfModel(List<List<ReadOnlyFirst>> arrayArrayOfModel) {
+    this.arrayArrayOfModel = arrayArrayOfModel;
+    return this;
+  }
+
+  public ArrayTest addArrayArrayOfModelItem(List<ReadOnlyFirst> arrayArrayOfModelItem) {
+    if (this.arrayArrayOfModel == null) {
+      this.arrayArrayOfModel = new ArrayList<>();
+    }
+    this.arrayArrayOfModel.add(arrayArrayOfModelItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayOfModel
+   * @return arrayArrayOfModel
+  */
+  @Schema(name = "arrayArrayOfModel", defaultValue = "")
+
+  @Valid
+
+  public List<List<ReadOnlyFirst>> getArrayArrayOfModel() {
+    return arrayArrayOfModel;
+  }
+
+  public void setArrayArrayOfModel(List<List<ReadOnlyFirst>> arrayArrayOfModel) {
+    this.arrayArrayOfModel = arrayArrayOfModel;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayTest arrayTest = (ArrayTest) o;
+    return Objects.equals(this.arrayOfString, arrayTest.arrayOfString) &&
+        Objects.equals(this.arrayArrayOfInteger, arrayTest.arrayArrayOfInteger) &&
+        Objects.equals(this.arrayArrayOfModel, arrayTest.arrayArrayOfModel);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayOfString, arrayArrayOfInteger, arrayArrayOfModel);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayTest {\n");
+    
+    sb.append("    arrayOfString: ").append(toIndentedString(arrayOfString)).append("\n");
+    sb.append("    arrayArrayOfInteger: ").append(toIndentedString(arrayArrayOfInteger)).append("\n");
+    sb.append("    arrayArrayOfModel: ").append(toIndentedString(arrayArrayOfModel)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/BigCat.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/BigCat.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f4a080ad8d207649ed357bd5b170142b921935f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/BigCat.java
@@ -0,0 +1,126 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.BigCatAllOf;
+import org.openapitools.model.Cat;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * BigCat
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class BigCat extends Cat  {
+  /**
+   * Gets or Sets kind
+   */
+  public enum KindEnum {
+    LIONS("lions"),
+    
+    TIGERS("tigers"),
+    
+    LEOPARDS("leopards"),
+    
+    JAGUARS("jaguars");
+
+    private String value;
+
+    KindEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static KindEnum fromValue(String value) {
+      for (KindEnum b : KindEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("kind")
+  private KindEnum kind;
+
+  public BigCat kind(KindEnum kind) {
+    this.kind = kind;
+    return this;
+  }
+
+  /**
+   * Get kind
+   * @return kind
+  */
+  @Schema(name = "kind", defaultValue = "")
+
+
+  public KindEnum getKind() {
+    return kind;
+  }
+
+  public void setKind(KindEnum kind) {
+    this.kind = kind;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BigCat bigCat = (BigCat) o;
+    return Objects.equals(this.kind, bigCat.kind) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(kind, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BigCat {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    kind: ").append(toIndentedString(kind)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/BigCatAllOf.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/BigCatAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..d0a47ab5127c66f1da66cb709a5a94d3ddf03bfe
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/BigCatAllOf.java
@@ -0,0 +1,123 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * BigCatAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class BigCatAllOf   {
+  /**
+   * Gets or Sets kind
+   */
+  public enum KindEnum {
+    LIONS("lions"),
+    
+    TIGERS("tigers"),
+    
+    LEOPARDS("leopards"),
+    
+    JAGUARS("jaguars");
+
+    private String value;
+
+    KindEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static KindEnum fromValue(String value) {
+      for (KindEnum b : KindEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("kind")
+  private KindEnum kind;
+
+  public BigCatAllOf kind(KindEnum kind) {
+    this.kind = kind;
+    return this;
+  }
+
+  /**
+   * Get kind
+   * @return kind
+  */
+  @Schema(name = "kind", defaultValue = "")
+
+
+  public KindEnum getKind() {
+    return kind;
+  }
+
+  public void setKind(KindEnum kind) {
+    this.kind = kind;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BigCatAllOf bigCatAllOf = (BigCatAllOf) o;
+    return Objects.equals(this.kind, bigCatAllOf.kind);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(kind);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BigCatAllOf {\n");
+    
+    sb.append("    kind: ").append(toIndentedString(kind)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Capitalization.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Capitalization.java
new file mode 100644
index 0000000000000000000000000000000000000000..92d9a7245f168d96d975f14ce65aac2276c59f73
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Capitalization.java
@@ -0,0 +1,208 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Capitalization
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Capitalization   {
+  @JsonProperty("smallCamel")
+  private String smallCamel;
+
+  @JsonProperty("CapitalCamel")
+  private String capitalCamel;
+
+  @JsonProperty("small_Snake")
+  private String smallSnake;
+
+  @JsonProperty("Capital_Snake")
+  private String capitalSnake;
+
+  @JsonProperty("SCA_ETH_Flow_Points")
+  private String scAETHFlowPoints;
+
+  @JsonProperty("ATT_NAME")
+  private String ATT_NAME;
+
+  public Capitalization smallCamel(String smallCamel) {
+    this.smallCamel = smallCamel;
+    return this;
+  }
+
+  /**
+   * Get smallCamel
+   * @return smallCamel
+  */
+  @Schema(name = "smallCamel", defaultValue = "")
+
+
+  public String getSmallCamel() {
+    return smallCamel;
+  }
+
+  public void setSmallCamel(String smallCamel) {
+    this.smallCamel = smallCamel;
+  }
+
+  public Capitalization capitalCamel(String capitalCamel) {
+    this.capitalCamel = capitalCamel;
+    return this;
+  }
+
+  /**
+   * Get capitalCamel
+   * @return capitalCamel
+  */
+  @Schema(name = "capitalCamel", defaultValue = "")
+
+
+  public String getCapitalCamel() {
+    return capitalCamel;
+  }
+
+  public void setCapitalCamel(String capitalCamel) {
+    this.capitalCamel = capitalCamel;
+  }
+
+  public Capitalization smallSnake(String smallSnake) {
+    this.smallSnake = smallSnake;
+    return this;
+  }
+
+  /**
+   * Get smallSnake
+   * @return smallSnake
+  */
+  @Schema(name = "smallSnake", defaultValue = "")
+
+
+  public String getSmallSnake() {
+    return smallSnake;
+  }
+
+  public void setSmallSnake(String smallSnake) {
+    this.smallSnake = smallSnake;
+  }
+
+  public Capitalization capitalSnake(String capitalSnake) {
+    this.capitalSnake = capitalSnake;
+    return this;
+  }
+
+  /**
+   * Get capitalSnake
+   * @return capitalSnake
+  */
+  @Schema(name = "capitalSnake", defaultValue = "")
+
+
+  public String getCapitalSnake() {
+    return capitalSnake;
+  }
+
+  public void setCapitalSnake(String capitalSnake) {
+    this.capitalSnake = capitalSnake;
+  }
+
+  public Capitalization scAETHFlowPoints(String scAETHFlowPoints) {
+    this.scAETHFlowPoints = scAETHFlowPoints;
+    return this;
+  }
+
+  /**
+   * Get scAETHFlowPoints
+   * @return scAETHFlowPoints
+  */
+  @Schema(name = "scAETHFlowPoints", defaultValue = "")
+
+
+  public String getScAETHFlowPoints() {
+    return scAETHFlowPoints;
+  }
+
+  public void setScAETHFlowPoints(String scAETHFlowPoints) {
+    this.scAETHFlowPoints = scAETHFlowPoints;
+  }
+
+  public Capitalization ATT_NAME(String ATT_NAME) {
+    this.ATT_NAME = ATT_NAME;
+    return this;
+  }
+
+  /**
+   * Name of the pet 
+   * @return ATT_NAME
+  */
+  @Schema(name = "ATT_NAME", defaultValue = "Name of the pet ")
+
+
+  public String getATTNAME() {
+    return ATT_NAME;
+  }
+
+  public void setATTNAME(String ATT_NAME) {
+    this.ATT_NAME = ATT_NAME;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Capitalization capitalization = (Capitalization) o;
+    return Objects.equals(this.smallCamel, capitalization.smallCamel) &&
+        Objects.equals(this.capitalCamel, capitalization.capitalCamel) &&
+        Objects.equals(this.smallSnake, capitalization.smallSnake) &&
+        Objects.equals(this.capitalSnake, capitalization.capitalSnake) &&
+        Objects.equals(this.scAETHFlowPoints, capitalization.scAETHFlowPoints) &&
+        Objects.equals(this.ATT_NAME, capitalization.ATT_NAME);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(smallCamel, capitalCamel, smallSnake, capitalSnake, scAETHFlowPoints, ATT_NAME);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Capitalization {\n");
+    
+    sb.append("    smallCamel: ").append(toIndentedString(smallCamel)).append("\n");
+    sb.append("    capitalCamel: ").append(toIndentedString(capitalCamel)).append("\n");
+    sb.append("    smallSnake: ").append(toIndentedString(smallSnake)).append("\n");
+    sb.append("    capitalSnake: ").append(toIndentedString(capitalSnake)).append("\n");
+    sb.append("    scAETHFlowPoints: ").append(toIndentedString(scAETHFlowPoints)).append("\n");
+    sb.append("    ATT_NAME: ").append(toIndentedString(ATT_NAME)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Cat.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Cat.java
new file mode 100644
index 0000000000000000000000000000000000000000..2e496fb4accd023274cd8876f918d9bc81830216
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Cat.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.model.Animal;
+import org.openapitools.model.CatAllOf;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Cat
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Cat extends Animal  {
+  @JsonProperty("declawed")
+  private Boolean declawed;
+
+  public Cat declawed(Boolean declawed) {
+    this.declawed = declawed;
+    return this;
+  }
+
+  /**
+   * Get declawed
+   * @return declawed
+  */
+  @Schema(name = "declawed", defaultValue = "")
+
+
+  public Boolean getDeclawed() {
+    return declawed;
+  }
+
+  public void setDeclawed(Boolean declawed) {
+    this.declawed = declawed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Cat cat = (Cat) o;
+    return Objects.equals(this.declawed, cat.declawed) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(declawed, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Cat {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    declawed: ").append(toIndentedString(declawed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/CatAllOf.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/CatAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..b732a62b1bc3c125f93944e64bd0e7ddcee8b596
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/CatAllOf.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * CatAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class CatAllOf   {
+  @JsonProperty("declawed")
+  private Boolean declawed;
+
+  public CatAllOf declawed(Boolean declawed) {
+    this.declawed = declawed;
+    return this;
+  }
+
+  /**
+   * Get declawed
+   * @return declawed
+  */
+  @Schema(name = "declawed", defaultValue = "")
+
+
+  public Boolean getDeclawed() {
+    return declawed;
+  }
+
+  public void setDeclawed(Boolean declawed) {
+    this.declawed = declawed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CatAllOf catAllOf = (CatAllOf) o;
+    return Objects.equals(this.declawed, catAllOf.declawed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(declawed);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CatAllOf {\n");
+    
+    sb.append("    declawed: ").append(toIndentedString(declawed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Category.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Category.java
new file mode 100644
index 0000000000000000000000000000000000000000..038fc8df3afd7211ee72d0f74168dbf1423bfb14
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Category.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Category
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Category   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name = "default-name";
+
+  public Category id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Category name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Category category = (Category) o;
+    return Objects.equals(this.id, category.id) &&
+        Objects.equals(this.name, category.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Category {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ClassModel.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ClassModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa2a736f4fb527cad6a7a173117b0a211b4e5923
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ClassModel.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model with \&quot;_class\&quot; property
+ */
+@Schema(name = "ClassModel",description = "Model for testing model with \"_class\" property")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ClassModel   {
+  @JsonProperty("_class")
+  private String propertyClass;
+
+  public ClassModel propertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+    return this;
+  }
+
+  /**
+   * Get propertyClass
+   * @return propertyClass
+  */
+  @Schema(name = "propertyClass", defaultValue = "")
+
+
+  public String getPropertyClass() {
+    return propertyClass;
+  }
+
+  public void setPropertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ClassModel classModel = (ClassModel) o;
+    return Objects.equals(this.propertyClass, classModel.propertyClass);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(propertyClass);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ClassModel {\n");
+    
+    sb.append("    propertyClass: ").append(toIndentedString(propertyClass)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Client.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..e11bd4ff1b13d8e49d80ca56033f92f6b92d4a7f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Client.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Client
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Client   {
+  @JsonProperty("client")
+  private String client;
+
+  public Client client(String client) {
+    this.client = client;
+    return this;
+  }
+
+  /**
+   * Get client
+   * @return client
+  */
+  @Schema(name = "client", defaultValue = "")
+
+
+  public String getClient() {
+    return client;
+  }
+
+  public void setClient(String client) {
+    this.client = client;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Client client = (Client) o;
+    return Objects.equals(this.client, client.client);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(client);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Client {\n");
+    
+    sb.append("    client: ").append(toIndentedString(client)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Dog.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Dog.java
new file mode 100644
index 0000000000000000000000000000000000000000..ed5dc71a4ba24b421e4506efab00505af4d47fad
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Dog.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.model.Animal;
+import org.openapitools.model.DogAllOf;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Dog
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Dog extends Animal  {
+  @JsonProperty("breed")
+  private String breed;
+
+  public Dog breed(String breed) {
+    this.breed = breed;
+    return this;
+  }
+
+  /**
+   * Get breed
+   * @return breed
+  */
+  @Schema(name = "breed", defaultValue = "")
+
+
+  public String getBreed() {
+    return breed;
+  }
+
+  public void setBreed(String breed) {
+    this.breed = breed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Dog dog = (Dog) o;
+    return Objects.equals(this.breed, dog.breed) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(breed, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Dog {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    breed: ").append(toIndentedString(breed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/DogAllOf.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/DogAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c99bc376c3478a650e5f776f10c07b1921f7dd1
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/DogAllOf.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * DogAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class DogAllOf   {
+  @JsonProperty("breed")
+  private String breed;
+
+  public DogAllOf breed(String breed) {
+    this.breed = breed;
+    return this;
+  }
+
+  /**
+   * Get breed
+   * @return breed
+  */
+  @Schema(name = "breed", defaultValue = "")
+
+
+  public String getBreed() {
+    return breed;
+  }
+
+  public void setBreed(String breed) {
+    this.breed = breed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    DogAllOf dogAllOf = (DogAllOf) o;
+    return Objects.equals(this.breed, dogAllOf.breed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(breed);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class DogAllOf {\n");
+    
+    sb.append("    breed: ").append(toIndentedString(breed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/EnumArrays.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/EnumArrays.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1b2df0716a2aa0e29529f3c8b7c884739cb591c
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/EnumArrays.java
@@ -0,0 +1,190 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * EnumArrays
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class EnumArrays   {
+  /**
+   * Gets or Sets justSymbol
+   */
+  public enum JustSymbolEnum {
+    GREATER_THAN_OR_EQUAL_TO(">="),
+    
+    DOLLAR("$");
+
+    private String value;
+
+    JustSymbolEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static JustSymbolEnum fromValue(String value) {
+      for (JustSymbolEnum b : JustSymbolEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("just_symbol")
+  private JustSymbolEnum justSymbol;
+
+  /**
+   * Gets or Sets arrayEnum
+   */
+  public enum ArrayEnumEnum {
+    FISH("fish"),
+    
+    CRAB("crab");
+
+    private String value;
+
+    ArrayEnumEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static ArrayEnumEnum fromValue(String value) {
+      for (ArrayEnumEnum b : ArrayEnumEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("array_enum")
+  @Valid
+  private List<ArrayEnumEnum> arrayEnum = null;
+
+  public EnumArrays justSymbol(JustSymbolEnum justSymbol) {
+    this.justSymbol = justSymbol;
+    return this;
+  }
+
+  /**
+   * Get justSymbol
+   * @return justSymbol
+  */
+  @Schema(name = "justSymbol", defaultValue = "")
+
+
+  public JustSymbolEnum getJustSymbol() {
+    return justSymbol;
+  }
+
+  public void setJustSymbol(JustSymbolEnum justSymbol) {
+    this.justSymbol = justSymbol;
+  }
+
+  public EnumArrays arrayEnum(List<ArrayEnumEnum> arrayEnum) {
+    this.arrayEnum = arrayEnum;
+    return this;
+  }
+
+  public EnumArrays addArrayEnumItem(ArrayEnumEnum arrayEnumItem) {
+    if (this.arrayEnum == null) {
+      this.arrayEnum = new ArrayList<>();
+    }
+    this.arrayEnum.add(arrayEnumItem);
+    return this;
+  }
+
+  /**
+   * Get arrayEnum
+   * @return arrayEnum
+  */
+  @Schema(name = "arrayEnum", defaultValue = "")
+
+
+  public List<ArrayEnumEnum> getArrayEnum() {
+    return arrayEnum;
+  }
+
+  public void setArrayEnum(List<ArrayEnumEnum> arrayEnum) {
+    this.arrayEnum = arrayEnum;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    EnumArrays enumArrays = (EnumArrays) o;
+    return Objects.equals(this.justSymbol, enumArrays.justSymbol) &&
+        Objects.equals(this.arrayEnum, enumArrays.arrayEnum);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(justSymbol, arrayEnum);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class EnumArrays {\n");
+    
+    sb.append("    justSymbol: ").append(toIndentedString(justSymbol)).append("\n");
+    sb.append("    arrayEnum: ").append(toIndentedString(arrayEnum)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/EnumClass.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/EnumClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3d30c1ad453729c1e301ec513b2ad9bb8a3f600
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/EnumClass.java
@@ -0,0 +1,55 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets EnumClass
+ */
+public enum EnumClass {
+  
+  _ABC("_abc"),
+  
+  _EFG("-efg"),
+  
+  _XYZ_("(xyz)");
+
+  private String value;
+
+  EnumClass(String value) {
+    this.value = value;
+  }
+
+  @JsonValue
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(value);
+  }
+
+  @JsonCreator
+  public static EnumClass fromValue(String value) {
+    for (EnumClass b : EnumClass.values()) {
+      if (b.value.equals(value)) {
+        return b;
+      }
+    }
+    throw new IllegalArgumentException("Unexpected value '" + value + "'");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/EnumTest.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/EnumTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..938af53e2b816bd12614e5cfa329b6a5c9737b4a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/EnumTest.java
@@ -0,0 +1,331 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.OuterEnum;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * EnumTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class EnumTest   {
+  /**
+   * Gets or Sets enumString
+   */
+  public enum EnumStringEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower"),
+    
+    EMPTY("");
+
+    private String value;
+
+    EnumStringEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumStringEnum fromValue(String value) {
+      for (EnumStringEnum b : EnumStringEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_string")
+  private EnumStringEnum enumString;
+
+  /**
+   * Gets or Sets enumStringRequired
+   */
+  public enum EnumStringRequiredEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower"),
+    
+    EMPTY("");
+
+    private String value;
+
+    EnumStringRequiredEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumStringRequiredEnum fromValue(String value) {
+      for (EnumStringRequiredEnum b : EnumStringRequiredEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_string_required")
+  private EnumStringRequiredEnum enumStringRequired;
+
+  /**
+   * Gets or Sets enumInteger
+   */
+  public enum EnumIntegerEnum {
+    NUMBER_1(1),
+    
+    NUMBER_MINUS_1(-1);
+
+    private Integer value;
+
+    EnumIntegerEnum(Integer value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public Integer getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumIntegerEnum fromValue(Integer value) {
+      for (EnumIntegerEnum b : EnumIntegerEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_integer")
+  private EnumIntegerEnum enumInteger;
+
+  /**
+   * Gets or Sets enumNumber
+   */
+  public enum EnumNumberEnum {
+    NUMBER_1_DOT_1(1.1),
+    
+    NUMBER_MINUS_1_DOT_2(-1.2);
+
+    private Double value;
+
+    EnumNumberEnum(Double value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public Double getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumNumberEnum fromValue(Double value) {
+      for (EnumNumberEnum b : EnumNumberEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_number")
+  private EnumNumberEnum enumNumber;
+
+  @JsonProperty("outerEnum")
+  private OuterEnum outerEnum;
+
+  public EnumTest enumString(EnumStringEnum enumString) {
+    this.enumString = enumString;
+    return this;
+  }
+
+  /**
+   * Get enumString
+   * @return enumString
+  */
+  @Schema(name = "enumString", defaultValue = "")
+
+
+  public EnumStringEnum getEnumString() {
+    return enumString;
+  }
+
+  public void setEnumString(EnumStringEnum enumString) {
+    this.enumString = enumString;
+  }
+
+  public EnumTest enumStringRequired(EnumStringRequiredEnum enumStringRequired) {
+    this.enumStringRequired = enumStringRequired;
+    return this;
+  }
+
+  /**
+   * Get enumStringRequired
+   * @return enumStringRequired
+  */
+  @Schema(name = "enumStringRequired", required = true, defaultValue = "")
+  @NotNull
+
+
+  public EnumStringRequiredEnum getEnumStringRequired() {
+    return enumStringRequired;
+  }
+
+  public void setEnumStringRequired(EnumStringRequiredEnum enumStringRequired) {
+    this.enumStringRequired = enumStringRequired;
+  }
+
+  public EnumTest enumInteger(EnumIntegerEnum enumInteger) {
+    this.enumInteger = enumInteger;
+    return this;
+  }
+
+  /**
+   * Get enumInteger
+   * @return enumInteger
+  */
+  @Schema(name = "enumInteger", defaultValue = "")
+
+
+  public EnumIntegerEnum getEnumInteger() {
+    return enumInteger;
+  }
+
+  public void setEnumInteger(EnumIntegerEnum enumInteger) {
+    this.enumInteger = enumInteger;
+  }
+
+  public EnumTest enumNumber(EnumNumberEnum enumNumber) {
+    this.enumNumber = enumNumber;
+    return this;
+  }
+
+  /**
+   * Get enumNumber
+   * @return enumNumber
+  */
+  @Schema(name = "enumNumber", defaultValue = "")
+
+
+  public EnumNumberEnum getEnumNumber() {
+    return enumNumber;
+  }
+
+  public void setEnumNumber(EnumNumberEnum enumNumber) {
+    this.enumNumber = enumNumber;
+  }
+
+  public EnumTest outerEnum(OuterEnum outerEnum) {
+    this.outerEnum = outerEnum;
+    return this;
+  }
+
+  /**
+   * Get outerEnum
+   * @return outerEnum
+  */
+  @Schema(name = "outerEnum", defaultValue = "")
+
+  @Valid
+
+  public OuterEnum getOuterEnum() {
+    return outerEnum;
+  }
+
+  public void setOuterEnum(OuterEnum outerEnum) {
+    this.outerEnum = outerEnum;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    EnumTest enumTest = (EnumTest) o;
+    return Objects.equals(this.enumString, enumTest.enumString) &&
+        Objects.equals(this.enumStringRequired, enumTest.enumStringRequired) &&
+        Objects.equals(this.enumInteger, enumTest.enumInteger) &&
+        Objects.equals(this.enumNumber, enumTest.enumNumber) &&
+        Objects.equals(this.outerEnum, enumTest.outerEnum);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(enumString, enumStringRequired, enumInteger, enumNumber, outerEnum);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class EnumTest {\n");
+    
+    sb.append("    enumString: ").append(toIndentedString(enumString)).append("\n");
+    sb.append("    enumStringRequired: ").append(toIndentedString(enumStringRequired)).append("\n");
+    sb.append("    enumInteger: ").append(toIndentedString(enumInteger)).append("\n");
+    sb.append("    enumNumber: ").append(toIndentedString(enumNumber)).append("\n");
+    sb.append("    outerEnum: ").append(toIndentedString(outerEnum)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FileSchemaTestClass.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FileSchemaTestClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d1e9ca8495cde97f9cc2a350fbe63c78738934b
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FileSchemaTestClass.java
@@ -0,0 +1,121 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * FileSchemaTestClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FileSchemaTestClass   {
+  @JsonProperty("file")
+  private java.io.File file;
+
+  @JsonProperty("files")
+  @Valid
+  private List<java.io.File> files = null;
+
+  public FileSchemaTestClass file(java.io.File file) {
+    this.file = file;
+    return this;
+  }
+
+  /**
+   * Get file
+   * @return file
+  */
+  @Schema(name = "file", defaultValue = "")
+
+  @Valid
+
+  public java.io.File getFile() {
+    return file;
+  }
+
+  public void setFile(java.io.File file) {
+    this.file = file;
+  }
+
+  public FileSchemaTestClass files(List<java.io.File> files) {
+    this.files = files;
+    return this;
+  }
+
+  public FileSchemaTestClass addFilesItem(java.io.File filesItem) {
+    if (this.files == null) {
+      this.files = new ArrayList<>();
+    }
+    this.files.add(filesItem);
+    return this;
+  }
+
+  /**
+   * Get files
+   * @return files
+  */
+  @Schema(name = "files", defaultValue = "")
+
+  @Valid
+
+  public List<java.io.File> getFiles() {
+    return files;
+  }
+
+  public void setFiles(List<java.io.File> files) {
+    this.files = files;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    FileSchemaTestClass fileSchemaTestClass = (FileSchemaTestClass) o;
+    return Objects.equals(this.file, fileSchemaTestClass.file) &&
+        Objects.equals(this.files, fileSchemaTestClass.files);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(file, files);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class FileSchemaTestClass {\n");
+    
+    sb.append("    file: ").append(toIndentedString(file)).append("\n");
+    sb.append("    files: ").append(toIndentedString(files)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FormatTest.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FormatTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..6546370cd329ce02e7c034b5e3defbe1db6bde12
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FormatTest.java
@@ -0,0 +1,435 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.util.Arrays;
+import java.util.UUID;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * FormatTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FormatTest   {
+  @JsonProperty("integer")
+  private Integer integer;
+
+  @JsonProperty("int32")
+  private Integer int32;
+
+  @JsonProperty("int64")
+  private Long int64;
+
+  @JsonProperty("number")
+  private BigDecimal number;
+
+  @JsonProperty("float")
+  private Float _float;
+
+  @JsonProperty("double")
+  private Double _double;
+
+  @JsonProperty("string")
+  private String string;
+
+  @JsonProperty("byte")
+  private byte[] _byte;
+
+  @JsonProperty("binary")
+  private org.springframework.core.io.Resource binary;
+
+  @JsonProperty("date")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE)
+  private LocalDate date;
+
+  @JsonProperty("dateTime")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime dateTime;
+
+  @JsonProperty("uuid")
+  private UUID uuid;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("BigDecimal")
+  private BigDecimal bigDecimal;
+
+  public FormatTest integer(Integer integer) {
+    this.integer = integer;
+    return this;
+  }
+
+  /**
+   * Get integer
+   * minimum: 10
+   * maximum: 100
+   * @return integer
+  */
+  @Schema(name = "integer", defaultValue = "")
+
+@Min(10) @Max(100) 
+  public Integer getInteger() {
+    return integer;
+  }
+
+  public void setInteger(Integer integer) {
+    this.integer = integer;
+  }
+
+  public FormatTest int32(Integer int32) {
+    this.int32 = int32;
+    return this;
+  }
+
+  /**
+   * Get int32
+   * minimum: 20
+   * maximum: 200
+   * @return int32
+  */
+  @Schema(name = "int32", defaultValue = "")
+
+@Min(20) @Max(200) 
+  public Integer getInt32() {
+    return int32;
+  }
+
+  public void setInt32(Integer int32) {
+    this.int32 = int32;
+  }
+
+  public FormatTest int64(Long int64) {
+    this.int64 = int64;
+    return this;
+  }
+
+  /**
+   * Get int64
+   * @return int64
+  */
+  @Schema(name = "int64", defaultValue = "")
+
+
+  public Long getInt64() {
+    return int64;
+  }
+
+  public void setInt64(Long int64) {
+    this.int64 = int64;
+  }
+
+  public FormatTest number(BigDecimal number) {
+    this.number = number;
+    return this;
+  }
+
+  /**
+   * Get number
+   * minimum: 32.1
+   * maximum: 543.2
+   * @return number
+  */
+  @Schema(name = "number", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+@DecimalMin("32.1") @DecimalMax("543.2") 
+  public BigDecimal getNumber() {
+    return number;
+  }
+
+  public void setNumber(BigDecimal number) {
+    this.number = number;
+  }
+
+  public FormatTest _float(Float _float) {
+    this._float = _float;
+    return this;
+  }
+
+  /**
+   * Get _float
+   * minimum: 54.3
+   * maximum: 987.6
+   * @return _float
+  */
+  @Schema(name = "_float", defaultValue = "")
+
+@DecimalMin("54.3") @DecimalMax("987.6") 
+  public Float getFloat() {
+    return _float;
+  }
+
+  public void setFloat(Float _float) {
+    this._float = _float;
+  }
+
+  public FormatTest _double(Double _double) {
+    this._double = _double;
+    return this;
+  }
+
+  /**
+   * Get _double
+   * minimum: 67.8
+   * maximum: 123.4
+   * @return _double
+  */
+  @Schema(name = "_double", defaultValue = "")
+
+@DecimalMin("67.8") @DecimalMax("123.4") 
+  public Double getDouble() {
+    return _double;
+  }
+
+  public void setDouble(Double _double) {
+    this._double = _double;
+  }
+
+  public FormatTest string(String string) {
+    this.string = string;
+    return this;
+  }
+
+  /**
+   * Get string
+   * @return string
+  */
+  @Schema(name = "string", defaultValue = "")
+
+@Pattern(regexp = "/[a-z]/i") 
+  public String getString() {
+    return string;
+  }
+
+  public void setString(String string) {
+    this.string = string;
+  }
+
+  public FormatTest _byte(byte[] _byte) {
+    this._byte = _byte;
+    return this;
+  }
+
+  /**
+   * Get _byte
+   * @return _byte
+  */
+  @Schema(name = "_byte", required = true, defaultValue = "")
+  @NotNull
+
+
+  public byte[] getByte() {
+    return _byte;
+  }
+
+  public void setByte(byte[] _byte) {
+    this._byte = _byte;
+  }
+
+  public FormatTest binary(org.springframework.core.io.Resource binary) {
+    this.binary = binary;
+    return this;
+  }
+
+  /**
+   * Get binary
+   * @return binary
+  */
+  @Schema(name = "binary", defaultValue = "")
+
+  @Valid
+
+  public org.springframework.core.io.Resource getBinary() {
+    return binary;
+  }
+
+  public void setBinary(org.springframework.core.io.Resource binary) {
+    this.binary = binary;
+  }
+
+  public FormatTest date(LocalDate date) {
+    this.date = date;
+    return this;
+  }
+
+  /**
+   * Get date
+   * @return date
+  */
+  @Schema(name = "date", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public LocalDate getDate() {
+    return date;
+  }
+
+  public void setDate(LocalDate date) {
+    this.date = date;
+  }
+
+  public FormatTest dateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+    return this;
+  }
+
+  /**
+   * Get dateTime
+   * @return dateTime
+  */
+  @Schema(name = "dateTime", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getDateTime() {
+    return dateTime;
+  }
+
+  public void setDateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+  }
+
+  public FormatTest uuid(UUID uuid) {
+    this.uuid = uuid;
+    return this;
+  }
+
+  /**
+   * Get uuid
+   * @return uuid
+  */
+  @Schema(name = "uuid", example = "72f98069-206d-4f12-9f12-3d1e525a8e84", defaultValue = "")
+
+  @Valid
+
+  public UUID getUuid() {
+    return uuid;
+  }
+
+  public void setUuid(UUID uuid) {
+    this.uuid = uuid;
+  }
+
+  public FormatTest password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", required = true, defaultValue = "")
+  @NotNull
+
+@Size(min = 10, max = 64) 
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public FormatTest bigDecimal(BigDecimal bigDecimal) {
+    this.bigDecimal = bigDecimal;
+    return this;
+  }
+
+  /**
+   * Get bigDecimal
+   * @return bigDecimal
+  */
+  @Schema(name = "bigDecimal", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getBigDecimal() {
+    return bigDecimal;
+  }
+
+  public void setBigDecimal(BigDecimal bigDecimal) {
+    this.bigDecimal = bigDecimal;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    FormatTest formatTest = (FormatTest) o;
+    return Objects.equals(this.integer, formatTest.integer) &&
+        Objects.equals(this.int32, formatTest.int32) &&
+        Objects.equals(this.int64, formatTest.int64) &&
+        Objects.equals(this.number, formatTest.number) &&
+        Objects.equals(this._float, formatTest._float) &&
+        Objects.equals(this._double, formatTest._double) &&
+        Objects.equals(this.string, formatTest.string) &&
+        Arrays.equals(this._byte, formatTest._byte) &&
+        Objects.equals(this.binary, formatTest.binary) &&
+        Objects.equals(this.date, formatTest.date) &&
+        Objects.equals(this.dateTime, formatTest.dateTime) &&
+        Objects.equals(this.uuid, formatTest.uuid) &&
+        Objects.equals(this.password, formatTest.password) &&
+        Objects.equals(this.bigDecimal, formatTest.bigDecimal);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(integer, int32, int64, number, _float, _double, string, Arrays.hashCode(_byte), binary, date, dateTime, uuid, password, bigDecimal);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class FormatTest {\n");
+    
+    sb.append("    integer: ").append(toIndentedString(integer)).append("\n");
+    sb.append("    int32: ").append(toIndentedString(int32)).append("\n");
+    sb.append("    int64: ").append(toIndentedString(int64)).append("\n");
+    sb.append("    number: ").append(toIndentedString(number)).append("\n");
+    sb.append("    _float: ").append(toIndentedString(_float)).append("\n");
+    sb.append("    _double: ").append(toIndentedString(_double)).append("\n");
+    sb.append("    string: ").append(toIndentedString(string)).append("\n");
+    sb.append("    _byte: ").append(toIndentedString(_byte)).append("\n");
+    sb.append("    binary: ").append(toIndentedString(binary)).append("\n");
+    sb.append("    date: ").append(toIndentedString(date)).append("\n");
+    sb.append("    dateTime: ").append(toIndentedString(dateTime)).append("\n");
+    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    bigDecimal: ").append(toIndentedString(bigDecimal)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfb615a529fcf851112e0d03ebdda2b88636dd2e
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * HasOnlyReadOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class HasOnlyReadOnly   {
+  @JsonProperty("bar")
+  private String bar;
+
+  @JsonProperty("foo")
+  private String foo;
+
+  public HasOnlyReadOnly bar(String bar) {
+    this.bar = bar;
+    return this;
+  }
+
+  /**
+   * Get bar
+   * @return bar
+  */
+  @Schema(name = "bar", readOnly = true, defaultValue = "")
+
+
+  public String getBar() {
+    return bar;
+  }
+
+  public void setBar(String bar) {
+    this.bar = bar;
+  }
+
+  public HasOnlyReadOnly foo(String foo) {
+    this.foo = foo;
+    return this;
+  }
+
+  /**
+   * Get foo
+   * @return foo
+  */
+  @Schema(name = "foo", readOnly = true, defaultValue = "")
+
+
+  public String getFoo() {
+    return foo;
+  }
+
+  public void setFoo(String foo) {
+    this.foo = foo;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    HasOnlyReadOnly hasOnlyReadOnly = (HasOnlyReadOnly) o;
+    return Objects.equals(this.bar, hasOnlyReadOnly.bar) &&
+        Objects.equals(this.foo, hasOnlyReadOnly.foo);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(bar, foo);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class HasOnlyReadOnly {\n");
+    
+    sb.append("    bar: ").append(toIndentedString(bar)).append("\n");
+    sb.append("    foo: ").append(toIndentedString(foo)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/MapTest.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/MapTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ff73062758f04ef937017393c488750cc744270
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/MapTest.java
@@ -0,0 +1,234 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * MapTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MapTest   {
+  @JsonProperty("map_map_of_string")
+  @Valid
+  private Map<String, Map<String, String>> mapMapOfString = null;
+
+  /**
+   * Gets or Sets inner
+   */
+  public enum InnerEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower");
+
+    private String value;
+
+    InnerEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static InnerEnum fromValue(String value) {
+      for (InnerEnum b : InnerEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("map_of_enum_string")
+  @Valid
+  private Map<String, InnerEnum> mapOfEnumString = null;
+
+  @JsonProperty("direct_map")
+  @Valid
+  private Map<String, Boolean> directMap = null;
+
+  @JsonProperty("indirect_map")
+  @Valid
+  private Map<String, Boolean> indirectMap = null;
+
+  public MapTest mapMapOfString(Map<String, Map<String, String>> mapMapOfString) {
+    this.mapMapOfString = mapMapOfString;
+    return this;
+  }
+
+  public MapTest putMapMapOfStringItem(String key, Map<String, String> mapMapOfStringItem) {
+    if (this.mapMapOfString == null) {
+      this.mapMapOfString = new HashMap<>();
+    }
+    this.mapMapOfString.put(key, mapMapOfStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapOfString
+   * @return mapMapOfString
+  */
+  @Schema(name = "mapMapOfString", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, String>> getMapMapOfString() {
+    return mapMapOfString;
+  }
+
+  public void setMapMapOfString(Map<String, Map<String, String>> mapMapOfString) {
+    this.mapMapOfString = mapMapOfString;
+  }
+
+  public MapTest mapOfEnumString(Map<String, InnerEnum> mapOfEnumString) {
+    this.mapOfEnumString = mapOfEnumString;
+    return this;
+  }
+
+  public MapTest putMapOfEnumStringItem(String key, InnerEnum mapOfEnumStringItem) {
+    if (this.mapOfEnumString == null) {
+      this.mapOfEnumString = new HashMap<>();
+    }
+    this.mapOfEnumString.put(key, mapOfEnumStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapOfEnumString
+   * @return mapOfEnumString
+  */
+  @Schema(name = "mapOfEnumString", defaultValue = "")
+
+
+  public Map<String, InnerEnum> getMapOfEnumString() {
+    return mapOfEnumString;
+  }
+
+  public void setMapOfEnumString(Map<String, InnerEnum> mapOfEnumString) {
+    this.mapOfEnumString = mapOfEnumString;
+  }
+
+  public MapTest directMap(Map<String, Boolean> directMap) {
+    this.directMap = directMap;
+    return this;
+  }
+
+  public MapTest putDirectMapItem(String key, Boolean directMapItem) {
+    if (this.directMap == null) {
+      this.directMap = new HashMap<>();
+    }
+    this.directMap.put(key, directMapItem);
+    return this;
+  }
+
+  /**
+   * Get directMap
+   * @return directMap
+  */
+  @Schema(name = "directMap", defaultValue = "")
+
+
+  public Map<String, Boolean> getDirectMap() {
+    return directMap;
+  }
+
+  public void setDirectMap(Map<String, Boolean> directMap) {
+    this.directMap = directMap;
+  }
+
+  public MapTest indirectMap(Map<String, Boolean> indirectMap) {
+    this.indirectMap = indirectMap;
+    return this;
+  }
+
+  public MapTest putIndirectMapItem(String key, Boolean indirectMapItem) {
+    if (this.indirectMap == null) {
+      this.indirectMap = new HashMap<>();
+    }
+    this.indirectMap.put(key, indirectMapItem);
+    return this;
+  }
+
+  /**
+   * Get indirectMap
+   * @return indirectMap
+  */
+  @Schema(name = "indirectMap", defaultValue = "")
+
+
+  public Map<String, Boolean> getIndirectMap() {
+    return indirectMap;
+  }
+
+  public void setIndirectMap(Map<String, Boolean> indirectMap) {
+    this.indirectMap = indirectMap;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MapTest mapTest = (MapTest) o;
+    return Objects.equals(this.mapMapOfString, mapTest.mapMapOfString) &&
+        Objects.equals(this.mapOfEnumString, mapTest.mapOfEnumString) &&
+        Objects.equals(this.directMap, mapTest.directMap) &&
+        Objects.equals(this.indirectMap, mapTest.indirectMap);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(mapMapOfString, mapOfEnumString, directMap, indirectMap);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MapTest {\n");
+    
+    sb.append("    mapMapOfString: ").append(toIndentedString(mapMapOfString)).append("\n");
+    sb.append("    mapOfEnumString: ").append(toIndentedString(mapOfEnumString)).append("\n");
+    sb.append("    directMap: ").append(toIndentedString(directMap)).append("\n");
+    sb.append("    indirectMap: ").append(toIndentedString(indirectMap)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..03a7be43cc4a606ba8a493c1868c6d25eb1bfdd9
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
@@ -0,0 +1,152 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.time.OffsetDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.openapitools.model.Animal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * MixedPropertiesAndAdditionalPropertiesClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MixedPropertiesAndAdditionalPropertiesClass   {
+  @JsonProperty("uuid")
+  private UUID uuid;
+
+  @JsonProperty("dateTime")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime dateTime;
+
+  @JsonProperty("map")
+  @Valid
+  private Map<String, Animal> map = null;
+
+  public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) {
+    this.uuid = uuid;
+    return this;
+  }
+
+  /**
+   * Get uuid
+   * @return uuid
+  */
+  @Schema(name = "uuid", defaultValue = "")
+
+  @Valid
+
+  public UUID getUuid() {
+    return uuid;
+  }
+
+  public void setUuid(UUID uuid) {
+    this.uuid = uuid;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass dateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+    return this;
+  }
+
+  /**
+   * Get dateTime
+   * @return dateTime
+  */
+  @Schema(name = "dateTime", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getDateTime() {
+    return dateTime;
+  }
+
+  public void setDateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass map(Map<String, Animal> map) {
+    this.map = map;
+    return this;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal mapItem) {
+    if (this.map == null) {
+      this.map = new HashMap<>();
+    }
+    this.map.put(key, mapItem);
+    return this;
+  }
+
+  /**
+   * Get map
+   * @return map
+  */
+  @Schema(name = "map", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Animal> getMap() {
+    return map;
+  }
+
+  public void setMap(Map<String, Animal> map) {
+    this.map = map;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MixedPropertiesAndAdditionalPropertiesClass mixedPropertiesAndAdditionalPropertiesClass = (MixedPropertiesAndAdditionalPropertiesClass) o;
+    return Objects.equals(this.uuid, mixedPropertiesAndAdditionalPropertiesClass.uuid) &&
+        Objects.equals(this.dateTime, mixedPropertiesAndAdditionalPropertiesClass.dateTime) &&
+        Objects.equals(this.map, mixedPropertiesAndAdditionalPropertiesClass.map);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(uuid, dateTime, map);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MixedPropertiesAndAdditionalPropertiesClass {\n");
+    
+    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
+    sb.append("    dateTime: ").append(toIndentedString(dateTime)).append("\n");
+    sb.append("    map: ").append(toIndentedString(map)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Model200Response.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Model200Response.java
new file mode 100644
index 0000000000000000000000000000000000000000..77bf91649b08bc0b9401643f4a917f1c44ee5aef
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Model200Response.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model name starting with number
+ */
+@Schema(name = "200_response",description = "Model for testing model name starting with number")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Model200Response   {
+  @JsonProperty("name")
+  private Integer name;
+
+  @JsonProperty("class")
+  private String propertyClass;
+
+  public Model200Response name(Integer name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public Integer getName() {
+    return name;
+  }
+
+  public void setName(Integer name) {
+    this.name = name;
+  }
+
+  public Model200Response propertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+    return this;
+  }
+
+  /**
+   * Get propertyClass
+   * @return propertyClass
+  */
+  @Schema(name = "propertyClass", defaultValue = "")
+
+
+  public String getPropertyClass() {
+    return propertyClass;
+  }
+
+  public void setPropertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Model200Response _200response = (Model200Response) o;
+    return Objects.equals(this.name, _200response.name) &&
+        Objects.equals(this.propertyClass, _200response.propertyClass);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, propertyClass);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Model200Response {\n");
+    
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    propertyClass: ").append(toIndentedString(propertyClass)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ModelApiResponse.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ModelApiResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..2443600df226840aa8f7adc54617d4cca257329d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ModelApiResponse.java
@@ -0,0 +1,133 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ModelApiResponse
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelApiResponse   {
+  @JsonProperty("code")
+  private Integer code;
+
+  @JsonProperty("type")
+  private String type;
+
+  @JsonProperty("message")
+  private String message;
+
+  public ModelApiResponse code(Integer code) {
+    this.code = code;
+    return this;
+  }
+
+  /**
+   * Get code
+   * @return code
+  */
+  @Schema(name = "code", defaultValue = "")
+
+
+  public Integer getCode() {
+    return code;
+  }
+
+  public void setCode(Integer code) {
+    this.code = code;
+  }
+
+  public ModelApiResponse type(String type) {
+    this.type = type;
+    return this;
+  }
+
+  /**
+   * Get type
+   * @return type
+  */
+  @Schema(name = "type", defaultValue = "")
+
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public ModelApiResponse message(String message) {
+    this.message = message;
+    return this;
+  }
+
+  /**
+   * Get message
+   * @return message
+  */
+  @Schema(name = "message", defaultValue = "")
+
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelApiResponse _apiResponse = (ModelApiResponse) o;
+    return Objects.equals(this.code, _apiResponse.code) &&
+        Objects.equals(this.type, _apiResponse.type) &&
+        Objects.equals(this.message, _apiResponse.message);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(code, type, message);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelApiResponse {\n");
+    
+    sb.append("    code: ").append(toIndentedString(code)).append("\n");
+    sb.append("    type: ").append(toIndentedString(type)).append("\n");
+    sb.append("    message: ").append(toIndentedString(message)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ModelReturn.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ModelReturn.java
new file mode 100644
index 0000000000000000000000000000000000000000..0301a47e9f3e7c7f7c18f5cdfdcbe916c12fd340
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ModelReturn.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing reserved words
+ */
+@Schema(name = "Return",description = "Model for testing reserved words")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelReturn   {
+  @JsonProperty("return")
+  private Integer _return;
+
+  public ModelReturn _return(Integer _return) {
+    this._return = _return;
+    return this;
+  }
+
+  /**
+   * Get _return
+   * @return _return
+  */
+  @Schema(name = "_return", defaultValue = "")
+
+
+  public Integer getReturn() {
+    return _return;
+  }
+
+  public void setReturn(Integer _return) {
+    this._return = _return;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelReturn _return = (ModelReturn) o;
+    return Objects.equals(this._return, _return._return);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(_return);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelReturn {\n");
+    
+    sb.append("    _return: ").append(toIndentedString(_return)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Name.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Name.java
new file mode 100644
index 0000000000000000000000000000000000000000..62a16f80ee07ade8aaa8159110929935a3b8d6e0
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Name.java
@@ -0,0 +1,160 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model name same as property name
+ */
+@Schema(name = "Name",description = "Model for testing model name same as property name")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Name   {
+  @JsonProperty("name")
+  private Integer name;
+
+  @JsonProperty("snake_case")
+  private Integer snakeCase;
+
+  @JsonProperty("property")
+  private String property;
+
+  @JsonProperty("123Number")
+  private Integer _123number;
+
+  public Name name(Integer name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getName() {
+    return name;
+  }
+
+  public void setName(Integer name) {
+    this.name = name;
+  }
+
+  public Name snakeCase(Integer snakeCase) {
+    this.snakeCase = snakeCase;
+    return this;
+  }
+
+  /**
+   * Get snakeCase
+   * @return snakeCase
+  */
+  @Schema(name = "snakeCase", readOnly = true, defaultValue = "")
+
+
+  public Integer getSnakeCase() {
+    return snakeCase;
+  }
+
+  public void setSnakeCase(Integer snakeCase) {
+    this.snakeCase = snakeCase;
+  }
+
+  public Name property(String property) {
+    this.property = property;
+    return this;
+  }
+
+  /**
+   * Get property
+   * @return property
+  */
+  @Schema(name = "property", defaultValue = "")
+
+
+  public String getProperty() {
+    return property;
+  }
+
+  public void setProperty(String property) {
+    this.property = property;
+  }
+
+  public Name _123number(Integer _123number) {
+    this._123number = _123number;
+    return this;
+  }
+
+  /**
+   * Get _123number
+   * @return _123number
+  */
+  @Schema(name = "_123number", readOnly = true, defaultValue = "")
+
+
+  public Integer get123number() {
+    return _123number;
+  }
+
+  public void set123number(Integer _123number) {
+    this._123number = _123number;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Name name = (Name) o;
+    return Objects.equals(this.name, name.name) &&
+        Objects.equals(this.snakeCase, name.snakeCase) &&
+        Objects.equals(this.property, name.property) &&
+        Objects.equals(this._123number, name._123number);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, snakeCase, property, _123number);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Name {\n");
+    
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    snakeCase: ").append(toIndentedString(snakeCase)).append("\n");
+    sb.append("    property: ").append(toIndentedString(property)).append("\n");
+    sb.append("    _123number: ").append(toIndentedString(_123number)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/NumberOnly.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/NumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..521fad80d5a722f8bd3eb3072d330aa63ae083a3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/NumberOnly.java
@@ -0,0 +1,85 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * NumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class NumberOnly   {
+  @JsonProperty("JustNumber")
+  private BigDecimal justNumber;
+
+  public NumberOnly justNumber(BigDecimal justNumber) {
+    this.justNumber = justNumber;
+    return this;
+  }
+
+  /**
+   * Get justNumber
+   * @return justNumber
+  */
+  @Schema(name = "justNumber", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getJustNumber() {
+    return justNumber;
+  }
+
+  public void setJustNumber(BigDecimal justNumber) {
+    this.justNumber = justNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    NumberOnly numberOnly = (NumberOnly) o;
+    return Objects.equals(this.justNumber, numberOnly.justNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(justNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class NumberOnly {\n");
+    
+    sb.append("    justNumber: ").append(toIndentedString(justNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Order.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Order.java
new file mode 100644
index 0000000000000000000000000000000000000000..05071bdfe2bf754e2c7b8a18163b19c502908aff
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Order.java
@@ -0,0 +1,249 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.time.OffsetDateTime;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Order
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Order   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("petId")
+  private Long petId;
+
+  @JsonProperty("quantity")
+  private Integer quantity;
+
+  @JsonProperty("shipDate")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime shipDate;
+
+  /**
+   * Order Status
+   */
+  public enum StatusEnum {
+    PLACED("placed"),
+    
+    APPROVED("approved"),
+    
+    DELIVERED("delivered");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  @JsonProperty("complete")
+  private Boolean complete = false;
+
+  public Order id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Order petId(Long petId) {
+    this.petId = petId;
+    return this;
+  }
+
+  /**
+   * Get petId
+   * @return petId
+  */
+  @Schema(name = "petId", defaultValue = "")
+
+
+  public Long getPetId() {
+    return petId;
+  }
+
+  public void setPetId(Long petId) {
+    this.petId = petId;
+  }
+
+  public Order quantity(Integer quantity) {
+    this.quantity = quantity;
+    return this;
+  }
+
+  /**
+   * Get quantity
+   * @return quantity
+  */
+  @Schema(name = "quantity", defaultValue = "")
+
+
+  public Integer getQuantity() {
+    return quantity;
+  }
+
+  public void setQuantity(Integer quantity) {
+    this.quantity = quantity;
+  }
+
+  public Order shipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+    return this;
+  }
+
+  /**
+   * Get shipDate
+   * @return shipDate
+  */
+  @Schema(name = "shipDate", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getShipDate() {
+    return shipDate;
+  }
+
+  public void setShipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+  }
+
+  public Order status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Order Status
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "Order Status")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+  public Order complete(Boolean complete) {
+    this.complete = complete;
+    return this;
+  }
+
+  /**
+   * Get complete
+   * @return complete
+  */
+  @Schema(name = "complete", defaultValue = "")
+
+
+  public Boolean getComplete() {
+    return complete;
+  }
+
+  public void setComplete(Boolean complete) {
+    this.complete = complete;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Order order = (Order) o;
+    return Objects.equals(this.id, order.id) &&
+        Objects.equals(this.petId, order.petId) &&
+        Objects.equals(this.quantity, order.quantity) &&
+        Objects.equals(this.shipDate, order.shipDate) &&
+        Objects.equals(this.status, order.status) &&
+        Objects.equals(this.complete, order.complete);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, petId, quantity, shipDate, status, complete);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Order {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    petId: ").append(toIndentedString(petId)).append("\n");
+    sb.append("    quantity: ").append(toIndentedString(quantity)).append("\n");
+    sb.append("    shipDate: ").append(toIndentedString(shipDate)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    complete: ").append(toIndentedString(complete)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/OuterComposite.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/OuterComposite.java
new file mode 100644
index 0000000000000000000000000000000000000000..a721a3dde6a085844d35e03e0dfcf67a5febf507
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/OuterComposite.java
@@ -0,0 +1,135 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * OuterComposite
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class OuterComposite   {
+  @JsonProperty("my_number")
+  private BigDecimal myNumber;
+
+  @JsonProperty("my_string")
+  private String myString;
+
+  @JsonProperty("my_boolean")
+  private Boolean myBoolean;
+
+  public OuterComposite myNumber(BigDecimal myNumber) {
+    this.myNumber = myNumber;
+    return this;
+  }
+
+  /**
+   * Get myNumber
+   * @return myNumber
+  */
+  @Schema(name = "myNumber", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getMyNumber() {
+    return myNumber;
+  }
+
+  public void setMyNumber(BigDecimal myNumber) {
+    this.myNumber = myNumber;
+  }
+
+  public OuterComposite myString(String myString) {
+    this.myString = myString;
+    return this;
+  }
+
+  /**
+   * Get myString
+   * @return myString
+  */
+  @Schema(name = "myString", defaultValue = "")
+
+
+  public String getMyString() {
+    return myString;
+  }
+
+  public void setMyString(String myString) {
+    this.myString = myString;
+  }
+
+  public OuterComposite myBoolean(Boolean myBoolean) {
+    this.myBoolean = myBoolean;
+    return this;
+  }
+
+  /**
+   * Get myBoolean
+   * @return myBoolean
+  */
+  @Schema(name = "myBoolean", defaultValue = "")
+
+
+  public Boolean getMyBoolean() {
+    return myBoolean;
+  }
+
+  public void setMyBoolean(Boolean myBoolean) {
+    this.myBoolean = myBoolean;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    OuterComposite outerComposite = (OuterComposite) o;
+    return Objects.equals(this.myNumber, outerComposite.myNumber) &&
+        Objects.equals(this.myString, outerComposite.myString) &&
+        Objects.equals(this.myBoolean, outerComposite.myBoolean);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(myNumber, myString, myBoolean);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class OuterComposite {\n");
+    
+    sb.append("    myNumber: ").append(toIndentedString(myNumber)).append("\n");
+    sb.append("    myString: ").append(toIndentedString(myString)).append("\n");
+    sb.append("    myBoolean: ").append(toIndentedString(myBoolean)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/OuterEnum.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/OuterEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba0cca8a5e815e7cbeaade6896dd0e834ef7b4fe
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/OuterEnum.java
@@ -0,0 +1,55 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets OuterEnum
+ */
+public enum OuterEnum {
+  
+  PLACED("placed"),
+  
+  APPROVED("approved"),
+  
+  DELIVERED("delivered");
+
+  private String value;
+
+  OuterEnum(String value) {
+    this.value = value;
+  }
+
+  @JsonValue
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(value);
+  }
+
+  @JsonCreator
+  public static OuterEnum fromValue(String value) {
+    for (OuterEnum b : OuterEnum.values()) {
+      if (b.value.equals(value)) {
+        return b;
+      }
+    }
+    throw new IllegalArgumentException("Unexpected value '" + value + "'");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Pet.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Pet.java
new file mode 100644
index 0000000000000000000000000000000000000000..988eb317134d1171efe16791018e271e4bc1b30f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Pet.java
@@ -0,0 +1,273 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import org.openapitools.model.Category;
+import org.openapitools.model.Tag;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Pet
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Pet   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("category")
+  private Category category;
+
+  @JsonProperty("name")
+  private String name;
+
+  @JsonProperty("photoUrls")
+  @Valid
+  private Set<String> photoUrls = new LinkedHashSet<>();
+
+  @JsonProperty("tags")
+  @Valid
+  private List<Tag> tags = null;
+
+  /**
+   * pet status in the store
+   */
+  public enum StatusEnum {
+    AVAILABLE("available"),
+    
+    PENDING("pending"),
+    
+    SOLD("sold");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  public Pet id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Pet category(Category category) {
+    this.category = category;
+    return this;
+  }
+
+  /**
+   * Get category
+   * @return category
+  */
+  @Schema(name = "category", defaultValue = "")
+
+  @Valid
+
+  public Category getCategory() {
+    return category;
+  }
+
+  public void setCategory(Category category) {
+    this.category = category;
+  }
+
+  public Pet name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", example = "doggie", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public Pet photoUrls(Set<String> photoUrls) {
+    this.photoUrls = photoUrls;
+    return this;
+  }
+
+  public Pet addPhotoUrlsItem(String photoUrlsItem) {
+    this.photoUrls.add(photoUrlsItem);
+    return this;
+  }
+
+  /**
+   * Get photoUrls
+   * @return photoUrls
+  */
+  @Schema(name = "photoUrls", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Set<String> getPhotoUrls() {
+    return photoUrls;
+  }
+
+  @JsonDeserialize(as = LinkedHashSet.class)
+  public void setPhotoUrls(Set<String> photoUrls) {
+    this.photoUrls = photoUrls;
+  }
+
+  public Pet tags(List<Tag> tags) {
+    this.tags = tags;
+    return this;
+  }
+
+  public Pet addTagsItem(Tag tagsItem) {
+    if (this.tags == null) {
+      this.tags = new ArrayList<>();
+    }
+    this.tags.add(tagsItem);
+    return this;
+  }
+
+  /**
+   * Get tags
+   * @return tags
+  */
+  @Schema(name = "tags", defaultValue = "")
+
+  @Valid
+
+  public List<Tag> getTags() {
+    return tags;
+  }
+
+  public void setTags(List<Tag> tags) {
+    this.tags = tags;
+  }
+
+  public Pet status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * pet status in the store
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "pet status in the store")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Pet pet = (Pet) o;
+    return Objects.equals(this.id, pet.id) &&
+        Objects.equals(this.category, pet.category) &&
+        Objects.equals(this.name, pet.name) &&
+        Objects.equals(this.photoUrls, pet.photoUrls) &&
+        Objects.equals(this.tags, pet.tags) &&
+        Objects.equals(this.status, pet.status);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, category, name, photoUrls, tags, status);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Pet {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    category: ").append(toIndentedString(category)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    photoUrls: ").append(toIndentedString(photoUrls)).append("\n");
+    sb.append("    tags: ").append(toIndentedString(tags)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ReadOnlyFirst.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ReadOnlyFirst.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c51770a8e662dd5d57de2c19f502e9d536db08a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/ReadOnlyFirst.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ReadOnlyFirst
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ReadOnlyFirst   {
+  @JsonProperty("bar")
+  private String bar;
+
+  @JsonProperty("baz")
+  private String baz;
+
+  public ReadOnlyFirst bar(String bar) {
+    this.bar = bar;
+    return this;
+  }
+
+  /**
+   * Get bar
+   * @return bar
+  */
+  @Schema(name = "bar", readOnly = true, defaultValue = "")
+
+
+  public String getBar() {
+    return bar;
+  }
+
+  public void setBar(String bar) {
+    this.bar = bar;
+  }
+
+  public ReadOnlyFirst baz(String baz) {
+    this.baz = baz;
+    return this;
+  }
+
+  /**
+   * Get baz
+   * @return baz
+  */
+  @Schema(name = "baz", defaultValue = "")
+
+
+  public String getBaz() {
+    return baz;
+  }
+
+  public void setBaz(String baz) {
+    this.baz = baz;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ReadOnlyFirst readOnlyFirst = (ReadOnlyFirst) o;
+    return Objects.equals(this.bar, readOnlyFirst.bar) &&
+        Objects.equals(this.baz, readOnlyFirst.baz);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(bar, baz);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ReadOnlyFirst {\n");
+    
+    sb.append("    bar: ").append(toIndentedString(bar)).append("\n");
+    sb.append("    baz: ").append(toIndentedString(baz)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/SpecialModelName.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/SpecialModelName.java
new file mode 100644
index 0000000000000000000000000000000000000000..75f4be4e9f8f067ae60abd1268d60347d2d95724
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/SpecialModelName.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * SpecialModelName
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class SpecialModelName   {
+  @JsonProperty("$special[property.name]")
+  private Long $specialPropertyName;
+
+  public SpecialModelName $specialPropertyName(Long $specialPropertyName) {
+    this.$specialPropertyName = $specialPropertyName;
+    return this;
+  }
+
+  /**
+   * Get $specialPropertyName
+   * @return $specialPropertyName
+  */
+  @Schema(name = "$specialPropertyName", defaultValue = "")
+
+
+  public Long get$SpecialPropertyName() {
+    return $specialPropertyName;
+  }
+
+  public void set$SpecialPropertyName(Long $specialPropertyName) {
+    this.$specialPropertyName = $specialPropertyName;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SpecialModelName $specialModelName = (SpecialModelName) o;
+    return Objects.equals(this.$specialPropertyName, $specialModelName.$specialPropertyName);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash($specialPropertyName);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SpecialModelName {\n");
+    
+    sb.append("    $specialPropertyName: ").append(toIndentedString($specialPropertyName)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Tag.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Tag.java
new file mode 100644
index 0000000000000000000000000000000000000000..8722df999bfc306ae4cdd20cb567d8dd9247ac02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/Tag.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Tag
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Tag   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Tag id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Tag name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Tag tag = (Tag) o;
+    return Objects.equals(this.id, tag.id) &&
+        Objects.equals(this.name, tag.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Tag {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/TypeHolderDefault.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/TypeHolderDefault.java
new file mode 100644
index 0000000000000000000000000000000000000000..19e9bf310f769ea1e09ee1c959df0a77f3a10215
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/TypeHolderDefault.java
@@ -0,0 +1,198 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * TypeHolderDefault
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class TypeHolderDefault   {
+  @JsonProperty("string_item")
+  private String stringItem = "what";
+
+  @JsonProperty("number_item")
+  private BigDecimal numberItem;
+
+  @JsonProperty("integer_item")
+  private Integer integerItem;
+
+  @JsonProperty("bool_item")
+  private Boolean boolItem = true;
+
+  @JsonProperty("array_item")
+  @Valid
+  private List<Integer> arrayItem = new ArrayList<>();
+
+  public TypeHolderDefault stringItem(String stringItem) {
+    this.stringItem = stringItem;
+    return this;
+  }
+
+  /**
+   * Get stringItem
+   * @return stringItem
+  */
+  @Schema(name = "stringItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getStringItem() {
+    return stringItem;
+  }
+
+  public void setStringItem(String stringItem) {
+    this.stringItem = stringItem;
+  }
+
+  public TypeHolderDefault numberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+    return this;
+  }
+
+  /**
+   * Get numberItem
+   * @return numberItem
+  */
+  @Schema(name = "numberItem", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public BigDecimal getNumberItem() {
+    return numberItem;
+  }
+
+  public void setNumberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+  }
+
+  public TypeHolderDefault integerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+    return this;
+  }
+
+  /**
+   * Get integerItem
+   * @return integerItem
+  */
+  @Schema(name = "integerItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getIntegerItem() {
+    return integerItem;
+  }
+
+  public void setIntegerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+  }
+
+  public TypeHolderDefault boolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+    return this;
+  }
+
+  /**
+   * Get boolItem
+   * @return boolItem
+  */
+  @Schema(name = "boolItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Boolean getBoolItem() {
+    return boolItem;
+  }
+
+  public void setBoolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+  }
+
+  public TypeHolderDefault arrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+    return this;
+  }
+
+  public TypeHolderDefault addArrayItemItem(Integer arrayItemItem) {
+    this.arrayItem.add(arrayItemItem);
+    return this;
+  }
+
+  /**
+   * Get arrayItem
+   * @return arrayItem
+  */
+  @Schema(name = "arrayItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<Integer> getArrayItem() {
+    return arrayItem;
+  }
+
+  public void setArrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TypeHolderDefault typeHolderDefault = (TypeHolderDefault) o;
+    return Objects.equals(this.stringItem, typeHolderDefault.stringItem) &&
+        Objects.equals(this.numberItem, typeHolderDefault.numberItem) &&
+        Objects.equals(this.integerItem, typeHolderDefault.integerItem) &&
+        Objects.equals(this.boolItem, typeHolderDefault.boolItem) &&
+        Objects.equals(this.arrayItem, typeHolderDefault.arrayItem);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(stringItem, numberItem, integerItem, boolItem, arrayItem);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TypeHolderDefault {\n");
+    
+    sb.append("    stringItem: ").append(toIndentedString(stringItem)).append("\n");
+    sb.append("    numberItem: ").append(toIndentedString(numberItem)).append("\n");
+    sb.append("    integerItem: ").append(toIndentedString(integerItem)).append("\n");
+    sb.append("    boolItem: ").append(toIndentedString(boolItem)).append("\n");
+    sb.append("    arrayItem: ").append(toIndentedString(arrayItem)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/TypeHolderExample.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/TypeHolderExample.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9a3762bc74b482b1d24566ae6837fd1c4952a8f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/TypeHolderExample.java
@@ -0,0 +1,224 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * TypeHolderExample
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class TypeHolderExample   {
+  @JsonProperty("string_item")
+  private String stringItem;
+
+  @JsonProperty("number_item")
+  private BigDecimal numberItem;
+
+  @JsonProperty("float_item")
+  private Float floatItem;
+
+  @JsonProperty("integer_item")
+  private Integer integerItem;
+
+  @JsonProperty("bool_item")
+  private Boolean boolItem;
+
+  @JsonProperty("array_item")
+  @Valid
+  private List<Integer> arrayItem = new ArrayList<>();
+
+  public TypeHolderExample stringItem(String stringItem) {
+    this.stringItem = stringItem;
+    return this;
+  }
+
+  /**
+   * Get stringItem
+   * @return stringItem
+  */
+  @Schema(name = "stringItem", example = "what", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getStringItem() {
+    return stringItem;
+  }
+
+  public void setStringItem(String stringItem) {
+    this.stringItem = stringItem;
+  }
+
+  public TypeHolderExample numberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+    return this;
+  }
+
+  /**
+   * Get numberItem
+   * @return numberItem
+  */
+  @Schema(name = "numberItem", example = "1.234", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public BigDecimal getNumberItem() {
+    return numberItem;
+  }
+
+  public void setNumberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+  }
+
+  public TypeHolderExample floatItem(Float floatItem) {
+    this.floatItem = floatItem;
+    return this;
+  }
+
+  /**
+   * Get floatItem
+   * @return floatItem
+  */
+  @Schema(name = "floatItem", example = "1.234", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Float getFloatItem() {
+    return floatItem;
+  }
+
+  public void setFloatItem(Float floatItem) {
+    this.floatItem = floatItem;
+  }
+
+  public TypeHolderExample integerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+    return this;
+  }
+
+  /**
+   * Get integerItem
+   * @return integerItem
+  */
+  @Schema(name = "integerItem", example = "-2", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getIntegerItem() {
+    return integerItem;
+  }
+
+  public void setIntegerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+  }
+
+  public TypeHolderExample boolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+    return this;
+  }
+
+  /**
+   * Get boolItem
+   * @return boolItem
+  */
+  @Schema(name = "boolItem", example = "true", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Boolean getBoolItem() {
+    return boolItem;
+  }
+
+  public void setBoolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+  }
+
+  public TypeHolderExample arrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+    return this;
+  }
+
+  public TypeHolderExample addArrayItemItem(Integer arrayItemItem) {
+    this.arrayItem.add(arrayItemItem);
+    return this;
+  }
+
+  /**
+   * Get arrayItem
+   * @return arrayItem
+  */
+  @Schema(name = "arrayItem", example = "[0, 1, 2, 3]", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<Integer> getArrayItem() {
+    return arrayItem;
+  }
+
+  public void setArrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TypeHolderExample typeHolderExample = (TypeHolderExample) o;
+    return Objects.equals(this.stringItem, typeHolderExample.stringItem) &&
+        Objects.equals(this.numberItem, typeHolderExample.numberItem) &&
+        Objects.equals(this.floatItem, typeHolderExample.floatItem) &&
+        Objects.equals(this.integerItem, typeHolderExample.integerItem) &&
+        Objects.equals(this.boolItem, typeHolderExample.boolItem) &&
+        Objects.equals(this.arrayItem, typeHolderExample.arrayItem);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(stringItem, numberItem, floatItem, integerItem, boolItem, arrayItem);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TypeHolderExample {\n");
+    
+    sb.append("    stringItem: ").append(toIndentedString(stringItem)).append("\n");
+    sb.append("    numberItem: ").append(toIndentedString(numberItem)).append("\n");
+    sb.append("    floatItem: ").append(toIndentedString(floatItem)).append("\n");
+    sb.append("    integerItem: ").append(toIndentedString(integerItem)).append("\n");
+    sb.append("    boolItem: ").append(toIndentedString(boolItem)).append("\n");
+    sb.append("    arrayItem: ").append(toIndentedString(arrayItem)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/User.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..83152a155535be4664d8a23d2cadc8f922021653
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/User.java
@@ -0,0 +1,258 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * User
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class User   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("username")
+  private String username;
+
+  @JsonProperty("firstName")
+  private String firstName;
+
+  @JsonProperty("lastName")
+  private String lastName;
+
+  @JsonProperty("email")
+  private String email;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("phone")
+  private String phone;
+
+  @JsonProperty("userStatus")
+  private Integer userStatus;
+
+  public User id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public User username(String username) {
+    this.username = username;
+    return this;
+  }
+
+  /**
+   * Get username
+   * @return username
+  */
+  @Schema(name = "username", defaultValue = "")
+
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public User firstName(String firstName) {
+    this.firstName = firstName;
+    return this;
+  }
+
+  /**
+   * Get firstName
+   * @return firstName
+  */
+  @Schema(name = "firstName", defaultValue = "")
+
+
+  public String getFirstName() {
+    return firstName;
+  }
+
+  public void setFirstName(String firstName) {
+    this.firstName = firstName;
+  }
+
+  public User lastName(String lastName) {
+    this.lastName = lastName;
+    return this;
+  }
+
+  /**
+   * Get lastName
+   * @return lastName
+  */
+  @Schema(name = "lastName", defaultValue = "")
+
+
+  public String getLastName() {
+    return lastName;
+  }
+
+  public void setLastName(String lastName) {
+    this.lastName = lastName;
+  }
+
+  public User email(String email) {
+    this.email = email;
+    return this;
+  }
+
+  /**
+   * Get email
+   * @return email
+  */
+  @Schema(name = "email", defaultValue = "")
+
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+  public User password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", defaultValue = "")
+
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public User phone(String phone) {
+    this.phone = phone;
+    return this;
+  }
+
+  /**
+   * Get phone
+   * @return phone
+  */
+  @Schema(name = "phone", defaultValue = "")
+
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public User userStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+    return this;
+  }
+
+  /**
+   * User Status
+   * @return userStatus
+  */
+  @Schema(name = "userStatus", defaultValue = "User Status")
+
+
+  public Integer getUserStatus() {
+    return userStatus;
+  }
+
+  public void setUserStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    User user = (User) o;
+    return Objects.equals(this.id, user.id) &&
+        Objects.equals(this.username, user.username) &&
+        Objects.equals(this.firstName, user.firstName) &&
+        Objects.equals(this.lastName, user.lastName) &&
+        Objects.equals(this.email, user.email) &&
+        Objects.equals(this.password, user.password) &&
+        Objects.equals(this.phone, user.phone) &&
+        Objects.equals(this.userStatus, user.userStatus);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class User {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    username: ").append(toIndentedString(username)).append("\n");
+    sb.append("    firstName: ").append(toIndentedString(firstName)).append("\n");
+    sb.append("    lastName: ").append(toIndentedString(lastName)).append("\n");
+    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    phone: ").append(toIndentedString(phone)).append("\n");
+    sb.append("    userStatus: ").append(toIndentedString(userStatus)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/XmlItem.java b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/XmlItem.java
new file mode 100644
index 0000000000000000000000000000000000000000..59a183db0f62d3228837978041ec6ba77949ce09
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/XmlItem.java
@@ -0,0 +1,872 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * XmlItem
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class XmlItem   {
+  @JsonProperty("attribute_string")
+  private String attributeString;
+
+  @JsonProperty("attribute_number")
+  private BigDecimal attributeNumber;
+
+  @JsonProperty("attribute_integer")
+  private Integer attributeInteger;
+
+  @JsonProperty("attribute_boolean")
+  private Boolean attributeBoolean;
+
+  @JsonProperty("wrapped_array")
+  @Valid
+  private List<Integer> wrappedArray = null;
+
+  @JsonProperty("name_string")
+  private String nameString;
+
+  @JsonProperty("name_number")
+  private BigDecimal nameNumber;
+
+  @JsonProperty("name_integer")
+  private Integer nameInteger;
+
+  @JsonProperty("name_boolean")
+  private Boolean nameBoolean;
+
+  @JsonProperty("name_array")
+  @Valid
+  private List<Integer> nameArray = null;
+
+  @JsonProperty("name_wrapped_array")
+  @Valid
+  private List<Integer> nameWrappedArray = null;
+
+  @JsonProperty("prefix_string")
+  private String prefixString;
+
+  @JsonProperty("prefix_number")
+  private BigDecimal prefixNumber;
+
+  @JsonProperty("prefix_integer")
+  private Integer prefixInteger;
+
+  @JsonProperty("prefix_boolean")
+  private Boolean prefixBoolean;
+
+  @JsonProperty("prefix_array")
+  @Valid
+  private List<Integer> prefixArray = null;
+
+  @JsonProperty("prefix_wrapped_array")
+  @Valid
+  private List<Integer> prefixWrappedArray = null;
+
+  @JsonProperty("namespace_string")
+  private String namespaceString;
+
+  @JsonProperty("namespace_number")
+  private BigDecimal namespaceNumber;
+
+  @JsonProperty("namespace_integer")
+  private Integer namespaceInteger;
+
+  @JsonProperty("namespace_boolean")
+  private Boolean namespaceBoolean;
+
+  @JsonProperty("namespace_array")
+  @Valid
+  private List<Integer> namespaceArray = null;
+
+  @JsonProperty("namespace_wrapped_array")
+  @Valid
+  private List<Integer> namespaceWrappedArray = null;
+
+  @JsonProperty("prefix_ns_string")
+  private String prefixNsString;
+
+  @JsonProperty("prefix_ns_number")
+  private BigDecimal prefixNsNumber;
+
+  @JsonProperty("prefix_ns_integer")
+  private Integer prefixNsInteger;
+
+  @JsonProperty("prefix_ns_boolean")
+  private Boolean prefixNsBoolean;
+
+  @JsonProperty("prefix_ns_array")
+  @Valid
+  private List<Integer> prefixNsArray = null;
+
+  @JsonProperty("prefix_ns_wrapped_array")
+  @Valid
+  private List<Integer> prefixNsWrappedArray = null;
+
+  public XmlItem attributeString(String attributeString) {
+    this.attributeString = attributeString;
+    return this;
+  }
+
+  /**
+   * Get attributeString
+   * @return attributeString
+  */
+  @Schema(name = "attributeString", example = "string", defaultValue = "")
+
+
+  public String getAttributeString() {
+    return attributeString;
+  }
+
+  public void setAttributeString(String attributeString) {
+    this.attributeString = attributeString;
+  }
+
+  public XmlItem attributeNumber(BigDecimal attributeNumber) {
+    this.attributeNumber = attributeNumber;
+    return this;
+  }
+
+  /**
+   * Get attributeNumber
+   * @return attributeNumber
+  */
+  @Schema(name = "attributeNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getAttributeNumber() {
+    return attributeNumber;
+  }
+
+  public void setAttributeNumber(BigDecimal attributeNumber) {
+    this.attributeNumber = attributeNumber;
+  }
+
+  public XmlItem attributeInteger(Integer attributeInteger) {
+    this.attributeInteger = attributeInteger;
+    return this;
+  }
+
+  /**
+   * Get attributeInteger
+   * @return attributeInteger
+  */
+  @Schema(name = "attributeInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getAttributeInteger() {
+    return attributeInteger;
+  }
+
+  public void setAttributeInteger(Integer attributeInteger) {
+    this.attributeInteger = attributeInteger;
+  }
+
+  public XmlItem attributeBoolean(Boolean attributeBoolean) {
+    this.attributeBoolean = attributeBoolean;
+    return this;
+  }
+
+  /**
+   * Get attributeBoolean
+   * @return attributeBoolean
+  */
+  @Schema(name = "attributeBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getAttributeBoolean() {
+    return attributeBoolean;
+  }
+
+  public void setAttributeBoolean(Boolean attributeBoolean) {
+    this.attributeBoolean = attributeBoolean;
+  }
+
+  public XmlItem wrappedArray(List<Integer> wrappedArray) {
+    this.wrappedArray = wrappedArray;
+    return this;
+  }
+
+  public XmlItem addWrappedArrayItem(Integer wrappedArrayItem) {
+    if (this.wrappedArray == null) {
+      this.wrappedArray = new ArrayList<>();
+    }
+    this.wrappedArray.add(wrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get wrappedArray
+   * @return wrappedArray
+  */
+  @Schema(name = "wrappedArray", defaultValue = "")
+
+
+  public List<Integer> getWrappedArray() {
+    return wrappedArray;
+  }
+
+  public void setWrappedArray(List<Integer> wrappedArray) {
+    this.wrappedArray = wrappedArray;
+  }
+
+  public XmlItem nameString(String nameString) {
+    this.nameString = nameString;
+    return this;
+  }
+
+  /**
+   * Get nameString
+   * @return nameString
+  */
+  @Schema(name = "nameString", example = "string", defaultValue = "")
+
+
+  public String getNameString() {
+    return nameString;
+  }
+
+  public void setNameString(String nameString) {
+    this.nameString = nameString;
+  }
+
+  public XmlItem nameNumber(BigDecimal nameNumber) {
+    this.nameNumber = nameNumber;
+    return this;
+  }
+
+  /**
+   * Get nameNumber
+   * @return nameNumber
+  */
+  @Schema(name = "nameNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getNameNumber() {
+    return nameNumber;
+  }
+
+  public void setNameNumber(BigDecimal nameNumber) {
+    this.nameNumber = nameNumber;
+  }
+
+  public XmlItem nameInteger(Integer nameInteger) {
+    this.nameInteger = nameInteger;
+    return this;
+  }
+
+  /**
+   * Get nameInteger
+   * @return nameInteger
+  */
+  @Schema(name = "nameInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getNameInteger() {
+    return nameInteger;
+  }
+
+  public void setNameInteger(Integer nameInteger) {
+    this.nameInteger = nameInteger;
+  }
+
+  public XmlItem nameBoolean(Boolean nameBoolean) {
+    this.nameBoolean = nameBoolean;
+    return this;
+  }
+
+  /**
+   * Get nameBoolean
+   * @return nameBoolean
+  */
+  @Schema(name = "nameBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getNameBoolean() {
+    return nameBoolean;
+  }
+
+  public void setNameBoolean(Boolean nameBoolean) {
+    this.nameBoolean = nameBoolean;
+  }
+
+  public XmlItem nameArray(List<Integer> nameArray) {
+    this.nameArray = nameArray;
+    return this;
+  }
+
+  public XmlItem addNameArrayItem(Integer nameArrayItem) {
+    if (this.nameArray == null) {
+      this.nameArray = new ArrayList<>();
+    }
+    this.nameArray.add(nameArrayItem);
+    return this;
+  }
+
+  /**
+   * Get nameArray
+   * @return nameArray
+  */
+  @Schema(name = "nameArray", defaultValue = "")
+
+
+  public List<Integer> getNameArray() {
+    return nameArray;
+  }
+
+  public void setNameArray(List<Integer> nameArray) {
+    this.nameArray = nameArray;
+  }
+
+  public XmlItem nameWrappedArray(List<Integer> nameWrappedArray) {
+    this.nameWrappedArray = nameWrappedArray;
+    return this;
+  }
+
+  public XmlItem addNameWrappedArrayItem(Integer nameWrappedArrayItem) {
+    if (this.nameWrappedArray == null) {
+      this.nameWrappedArray = new ArrayList<>();
+    }
+    this.nameWrappedArray.add(nameWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get nameWrappedArray
+   * @return nameWrappedArray
+  */
+  @Schema(name = "nameWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getNameWrappedArray() {
+    return nameWrappedArray;
+  }
+
+  public void setNameWrappedArray(List<Integer> nameWrappedArray) {
+    this.nameWrappedArray = nameWrappedArray;
+  }
+
+  public XmlItem prefixString(String prefixString) {
+    this.prefixString = prefixString;
+    return this;
+  }
+
+  /**
+   * Get prefixString
+   * @return prefixString
+  */
+  @Schema(name = "prefixString", example = "string", defaultValue = "")
+
+
+  public String getPrefixString() {
+    return prefixString;
+  }
+
+  public void setPrefixString(String prefixString) {
+    this.prefixString = prefixString;
+  }
+
+  public XmlItem prefixNumber(BigDecimal prefixNumber) {
+    this.prefixNumber = prefixNumber;
+    return this;
+  }
+
+  /**
+   * Get prefixNumber
+   * @return prefixNumber
+  */
+  @Schema(name = "prefixNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getPrefixNumber() {
+    return prefixNumber;
+  }
+
+  public void setPrefixNumber(BigDecimal prefixNumber) {
+    this.prefixNumber = prefixNumber;
+  }
+
+  public XmlItem prefixInteger(Integer prefixInteger) {
+    this.prefixInteger = prefixInteger;
+    return this;
+  }
+
+  /**
+   * Get prefixInteger
+   * @return prefixInteger
+  */
+  @Schema(name = "prefixInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getPrefixInteger() {
+    return prefixInteger;
+  }
+
+  public void setPrefixInteger(Integer prefixInteger) {
+    this.prefixInteger = prefixInteger;
+  }
+
+  public XmlItem prefixBoolean(Boolean prefixBoolean) {
+    this.prefixBoolean = prefixBoolean;
+    return this;
+  }
+
+  /**
+   * Get prefixBoolean
+   * @return prefixBoolean
+  */
+  @Schema(name = "prefixBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getPrefixBoolean() {
+    return prefixBoolean;
+  }
+
+  public void setPrefixBoolean(Boolean prefixBoolean) {
+    this.prefixBoolean = prefixBoolean;
+  }
+
+  public XmlItem prefixArray(List<Integer> prefixArray) {
+    this.prefixArray = prefixArray;
+    return this;
+  }
+
+  public XmlItem addPrefixArrayItem(Integer prefixArrayItem) {
+    if (this.prefixArray == null) {
+      this.prefixArray = new ArrayList<>();
+    }
+    this.prefixArray.add(prefixArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixArray
+   * @return prefixArray
+  */
+  @Schema(name = "prefixArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixArray() {
+    return prefixArray;
+  }
+
+  public void setPrefixArray(List<Integer> prefixArray) {
+    this.prefixArray = prefixArray;
+  }
+
+  public XmlItem prefixWrappedArray(List<Integer> prefixWrappedArray) {
+    this.prefixWrappedArray = prefixWrappedArray;
+    return this;
+  }
+
+  public XmlItem addPrefixWrappedArrayItem(Integer prefixWrappedArrayItem) {
+    if (this.prefixWrappedArray == null) {
+      this.prefixWrappedArray = new ArrayList<>();
+    }
+    this.prefixWrappedArray.add(prefixWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixWrappedArray
+   * @return prefixWrappedArray
+  */
+  @Schema(name = "prefixWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixWrappedArray() {
+    return prefixWrappedArray;
+  }
+
+  public void setPrefixWrappedArray(List<Integer> prefixWrappedArray) {
+    this.prefixWrappedArray = prefixWrappedArray;
+  }
+
+  public XmlItem namespaceString(String namespaceString) {
+    this.namespaceString = namespaceString;
+    return this;
+  }
+
+  /**
+   * Get namespaceString
+   * @return namespaceString
+  */
+  @Schema(name = "namespaceString", example = "string", defaultValue = "")
+
+
+  public String getNamespaceString() {
+    return namespaceString;
+  }
+
+  public void setNamespaceString(String namespaceString) {
+    this.namespaceString = namespaceString;
+  }
+
+  public XmlItem namespaceNumber(BigDecimal namespaceNumber) {
+    this.namespaceNumber = namespaceNumber;
+    return this;
+  }
+
+  /**
+   * Get namespaceNumber
+   * @return namespaceNumber
+  */
+  @Schema(name = "namespaceNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getNamespaceNumber() {
+    return namespaceNumber;
+  }
+
+  public void setNamespaceNumber(BigDecimal namespaceNumber) {
+    this.namespaceNumber = namespaceNumber;
+  }
+
+  public XmlItem namespaceInteger(Integer namespaceInteger) {
+    this.namespaceInteger = namespaceInteger;
+    return this;
+  }
+
+  /**
+   * Get namespaceInteger
+   * @return namespaceInteger
+  */
+  @Schema(name = "namespaceInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getNamespaceInteger() {
+    return namespaceInteger;
+  }
+
+  public void setNamespaceInteger(Integer namespaceInteger) {
+    this.namespaceInteger = namespaceInteger;
+  }
+
+  public XmlItem namespaceBoolean(Boolean namespaceBoolean) {
+    this.namespaceBoolean = namespaceBoolean;
+    return this;
+  }
+
+  /**
+   * Get namespaceBoolean
+   * @return namespaceBoolean
+  */
+  @Schema(name = "namespaceBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getNamespaceBoolean() {
+    return namespaceBoolean;
+  }
+
+  public void setNamespaceBoolean(Boolean namespaceBoolean) {
+    this.namespaceBoolean = namespaceBoolean;
+  }
+
+  public XmlItem namespaceArray(List<Integer> namespaceArray) {
+    this.namespaceArray = namespaceArray;
+    return this;
+  }
+
+  public XmlItem addNamespaceArrayItem(Integer namespaceArrayItem) {
+    if (this.namespaceArray == null) {
+      this.namespaceArray = new ArrayList<>();
+    }
+    this.namespaceArray.add(namespaceArrayItem);
+    return this;
+  }
+
+  /**
+   * Get namespaceArray
+   * @return namespaceArray
+  */
+  @Schema(name = "namespaceArray", defaultValue = "")
+
+
+  public List<Integer> getNamespaceArray() {
+    return namespaceArray;
+  }
+
+  public void setNamespaceArray(List<Integer> namespaceArray) {
+    this.namespaceArray = namespaceArray;
+  }
+
+  public XmlItem namespaceWrappedArray(List<Integer> namespaceWrappedArray) {
+    this.namespaceWrappedArray = namespaceWrappedArray;
+    return this;
+  }
+
+  public XmlItem addNamespaceWrappedArrayItem(Integer namespaceWrappedArrayItem) {
+    if (this.namespaceWrappedArray == null) {
+      this.namespaceWrappedArray = new ArrayList<>();
+    }
+    this.namespaceWrappedArray.add(namespaceWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get namespaceWrappedArray
+   * @return namespaceWrappedArray
+  */
+  @Schema(name = "namespaceWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getNamespaceWrappedArray() {
+    return namespaceWrappedArray;
+  }
+
+  public void setNamespaceWrappedArray(List<Integer> namespaceWrappedArray) {
+    this.namespaceWrappedArray = namespaceWrappedArray;
+  }
+
+  public XmlItem prefixNsString(String prefixNsString) {
+    this.prefixNsString = prefixNsString;
+    return this;
+  }
+
+  /**
+   * Get prefixNsString
+   * @return prefixNsString
+  */
+  @Schema(name = "prefixNsString", example = "string", defaultValue = "")
+
+
+  public String getPrefixNsString() {
+    return prefixNsString;
+  }
+
+  public void setPrefixNsString(String prefixNsString) {
+    this.prefixNsString = prefixNsString;
+  }
+
+  public XmlItem prefixNsNumber(BigDecimal prefixNsNumber) {
+    this.prefixNsNumber = prefixNsNumber;
+    return this;
+  }
+
+  /**
+   * Get prefixNsNumber
+   * @return prefixNsNumber
+  */
+  @Schema(name = "prefixNsNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getPrefixNsNumber() {
+    return prefixNsNumber;
+  }
+
+  public void setPrefixNsNumber(BigDecimal prefixNsNumber) {
+    this.prefixNsNumber = prefixNsNumber;
+  }
+
+  public XmlItem prefixNsInteger(Integer prefixNsInteger) {
+    this.prefixNsInteger = prefixNsInteger;
+    return this;
+  }
+
+  /**
+   * Get prefixNsInteger
+   * @return prefixNsInteger
+  */
+  @Schema(name = "prefixNsInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getPrefixNsInteger() {
+    return prefixNsInteger;
+  }
+
+  public void setPrefixNsInteger(Integer prefixNsInteger) {
+    this.prefixNsInteger = prefixNsInteger;
+  }
+
+  public XmlItem prefixNsBoolean(Boolean prefixNsBoolean) {
+    this.prefixNsBoolean = prefixNsBoolean;
+    return this;
+  }
+
+  /**
+   * Get prefixNsBoolean
+   * @return prefixNsBoolean
+  */
+  @Schema(name = "prefixNsBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getPrefixNsBoolean() {
+    return prefixNsBoolean;
+  }
+
+  public void setPrefixNsBoolean(Boolean prefixNsBoolean) {
+    this.prefixNsBoolean = prefixNsBoolean;
+  }
+
+  public XmlItem prefixNsArray(List<Integer> prefixNsArray) {
+    this.prefixNsArray = prefixNsArray;
+    return this;
+  }
+
+  public XmlItem addPrefixNsArrayItem(Integer prefixNsArrayItem) {
+    if (this.prefixNsArray == null) {
+      this.prefixNsArray = new ArrayList<>();
+    }
+    this.prefixNsArray.add(prefixNsArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixNsArray
+   * @return prefixNsArray
+  */
+  @Schema(name = "prefixNsArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixNsArray() {
+    return prefixNsArray;
+  }
+
+  public void setPrefixNsArray(List<Integer> prefixNsArray) {
+    this.prefixNsArray = prefixNsArray;
+  }
+
+  public XmlItem prefixNsWrappedArray(List<Integer> prefixNsWrappedArray) {
+    this.prefixNsWrappedArray = prefixNsWrappedArray;
+    return this;
+  }
+
+  public XmlItem addPrefixNsWrappedArrayItem(Integer prefixNsWrappedArrayItem) {
+    if (this.prefixNsWrappedArray == null) {
+      this.prefixNsWrappedArray = new ArrayList<>();
+    }
+    this.prefixNsWrappedArray.add(prefixNsWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixNsWrappedArray
+   * @return prefixNsWrappedArray
+  */
+  @Schema(name = "prefixNsWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixNsWrappedArray() {
+    return prefixNsWrappedArray;
+  }
+
+  public void setPrefixNsWrappedArray(List<Integer> prefixNsWrappedArray) {
+    this.prefixNsWrappedArray = prefixNsWrappedArray;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    XmlItem xmlItem = (XmlItem) o;
+    return Objects.equals(this.attributeString, xmlItem.attributeString) &&
+        Objects.equals(this.attributeNumber, xmlItem.attributeNumber) &&
+        Objects.equals(this.attributeInteger, xmlItem.attributeInteger) &&
+        Objects.equals(this.attributeBoolean, xmlItem.attributeBoolean) &&
+        Objects.equals(this.wrappedArray, xmlItem.wrappedArray) &&
+        Objects.equals(this.nameString, xmlItem.nameString) &&
+        Objects.equals(this.nameNumber, xmlItem.nameNumber) &&
+        Objects.equals(this.nameInteger, xmlItem.nameInteger) &&
+        Objects.equals(this.nameBoolean, xmlItem.nameBoolean) &&
+        Objects.equals(this.nameArray, xmlItem.nameArray) &&
+        Objects.equals(this.nameWrappedArray, xmlItem.nameWrappedArray) &&
+        Objects.equals(this.prefixString, xmlItem.prefixString) &&
+        Objects.equals(this.prefixNumber, xmlItem.prefixNumber) &&
+        Objects.equals(this.prefixInteger, xmlItem.prefixInteger) &&
+        Objects.equals(this.prefixBoolean, xmlItem.prefixBoolean) &&
+        Objects.equals(this.prefixArray, xmlItem.prefixArray) &&
+        Objects.equals(this.prefixWrappedArray, xmlItem.prefixWrappedArray) &&
+        Objects.equals(this.namespaceString, xmlItem.namespaceString) &&
+        Objects.equals(this.namespaceNumber, xmlItem.namespaceNumber) &&
+        Objects.equals(this.namespaceInteger, xmlItem.namespaceInteger) &&
+        Objects.equals(this.namespaceBoolean, xmlItem.namespaceBoolean) &&
+        Objects.equals(this.namespaceArray, xmlItem.namespaceArray) &&
+        Objects.equals(this.namespaceWrappedArray, xmlItem.namespaceWrappedArray) &&
+        Objects.equals(this.prefixNsString, xmlItem.prefixNsString) &&
+        Objects.equals(this.prefixNsNumber, xmlItem.prefixNsNumber) &&
+        Objects.equals(this.prefixNsInteger, xmlItem.prefixNsInteger) &&
+        Objects.equals(this.prefixNsBoolean, xmlItem.prefixNsBoolean) &&
+        Objects.equals(this.prefixNsArray, xmlItem.prefixNsArray) &&
+        Objects.equals(this.prefixNsWrappedArray, xmlItem.prefixNsWrappedArray);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(attributeString, attributeNumber, attributeInteger, attributeBoolean, wrappedArray, nameString, nameNumber, nameInteger, nameBoolean, nameArray, nameWrappedArray, prefixString, prefixNumber, prefixInteger, prefixBoolean, prefixArray, prefixWrappedArray, namespaceString, namespaceNumber, namespaceInteger, namespaceBoolean, namespaceArray, namespaceWrappedArray, prefixNsString, prefixNsNumber, prefixNsInteger, prefixNsBoolean, prefixNsArray, prefixNsWrappedArray);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class XmlItem {\n");
+    
+    sb.append("    attributeString: ").append(toIndentedString(attributeString)).append("\n");
+    sb.append("    attributeNumber: ").append(toIndentedString(attributeNumber)).append("\n");
+    sb.append("    attributeInteger: ").append(toIndentedString(attributeInteger)).append("\n");
+    sb.append("    attributeBoolean: ").append(toIndentedString(attributeBoolean)).append("\n");
+    sb.append("    wrappedArray: ").append(toIndentedString(wrappedArray)).append("\n");
+    sb.append("    nameString: ").append(toIndentedString(nameString)).append("\n");
+    sb.append("    nameNumber: ").append(toIndentedString(nameNumber)).append("\n");
+    sb.append("    nameInteger: ").append(toIndentedString(nameInteger)).append("\n");
+    sb.append("    nameBoolean: ").append(toIndentedString(nameBoolean)).append("\n");
+    sb.append("    nameArray: ").append(toIndentedString(nameArray)).append("\n");
+    sb.append("    nameWrappedArray: ").append(toIndentedString(nameWrappedArray)).append("\n");
+    sb.append("    prefixString: ").append(toIndentedString(prefixString)).append("\n");
+    sb.append("    prefixNumber: ").append(toIndentedString(prefixNumber)).append("\n");
+    sb.append("    prefixInteger: ").append(toIndentedString(prefixInteger)).append("\n");
+    sb.append("    prefixBoolean: ").append(toIndentedString(prefixBoolean)).append("\n");
+    sb.append("    prefixArray: ").append(toIndentedString(prefixArray)).append("\n");
+    sb.append("    prefixWrappedArray: ").append(toIndentedString(prefixWrappedArray)).append("\n");
+    sb.append("    namespaceString: ").append(toIndentedString(namespaceString)).append("\n");
+    sb.append("    namespaceNumber: ").append(toIndentedString(namespaceNumber)).append("\n");
+    sb.append("    namespaceInteger: ").append(toIndentedString(namespaceInteger)).append("\n");
+    sb.append("    namespaceBoolean: ").append(toIndentedString(namespaceBoolean)).append("\n");
+    sb.append("    namespaceArray: ").append(toIndentedString(namespaceArray)).append("\n");
+    sb.append("    namespaceWrappedArray: ").append(toIndentedString(namespaceWrappedArray)).append("\n");
+    sb.append("    prefixNsString: ").append(toIndentedString(prefixNsString)).append("\n");
+    sb.append("    prefixNsNumber: ").append(toIndentedString(prefixNsNumber)).append("\n");
+    sb.append("    prefixNsInteger: ").append(toIndentedString(prefixNsInteger)).append("\n");
+    sb.append("    prefixNsBoolean: ").append(toIndentedString(prefixNsBoolean)).append("\n");
+    sb.append("    prefixNsArray: ").append(toIndentedString(prefixNsArray)).append("\n");
+    sb.append("    prefixNsWrappedArray: ").append(toIndentedString(prefixNsWrappedArray)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/resources/application.properties b/samples/openapi3/server/petstore/springboot-reactive/src/main/resources/application.properties
new file mode 100644
index 0000000000000000000000000000000000000000..9d06609db665e4097670b78b2c2adb4876cfc81f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/resources/application.properties
@@ -0,0 +1,3 @@
+server.port=80
+spring.jackson.date-format=org.openapitools.RFC3339DateFormat
+spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
diff --git a/samples/openapi3/server/petstore/springboot-reactive/src/main/resources/openapi.yaml b/samples/openapi3/server/petstore/springboot-reactive/src/main/resources/openapi.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d6386dc39bf4ff458f7db1f6e23a6e1e22b7e8c6
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-reactive/src/main/resources/openapi.yaml
@@ -0,0 +1,2264 @@
+openapi: 3.0.1
+info:
+  description: 'This spec is mainly for testing Petstore server and contains fake
+    endpoints, models. Please do not use this for any other purpose. Special characters:
+    " \'
+  license:
+    name: Apache-2.0
+    url: https://www.apache.org/licenses/LICENSE-2.0.html
+  title: OpenAPI Petstore
+  version: 1.0.0
+servers:
+- url: http://petstore.swagger.io:80/v2
+tags:
+- description: Everything about your Pets
+  name: pet
+- description: Access to Petstore orders
+  name: store
+- description: Operations about user
+  name: user
+paths:
+  /pet:
+    post:
+      operationId: addPet
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Pet'
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/Pet'
+        description: Pet object that needs to be added to the store
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "405":
+          content: {}
+          description: Invalid input
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Add a new pet to the store
+      tags:
+      - pet
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    put:
+      operationId: updatePet
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Pet'
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/Pet'
+        description: Pet object that needs to be added to the store
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Pet not found
+        "405":
+          content: {}
+          description: Validation exception
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Update an existing pet
+      tags:
+      - pet
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/findByStatus:
+    get:
+      description: Multiple status values can be provided with comma separated strings
+      operationId: findPetsByStatus
+      parameters:
+      - description: Status values that need to be considered for filter
+        explode: false
+        in: query
+        name: status
+        required: true
+        schema:
+          items:
+            default: available
+            enum:
+            - available
+            - pending
+            - sold
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid status value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Finds Pets by status
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/findByTags:
+    get:
+      deprecated: true
+      description: Multiple tags can be provided with comma separated strings. Use
+        tag1, tag2, tag3 for testing.
+      operationId: findPetsByTags
+      parameters:
+      - description: Tags to filter by
+        explode: false
+        in: query
+        name: tags
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+          uniqueItems: true
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+                uniqueItems: true
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+                uniqueItems: true
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid tag value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Finds Pets by tags
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/{petId}:
+    delete:
+      operationId: deletePet
+      parameters:
+      - in: header
+        name: api_key
+        schema:
+          type: string
+      - description: Pet id to delete
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid pet value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Deletes a pet
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    get:
+      description: Returns a single pet
+      operationId: getPetById
+      parameters:
+      - description: ID of pet to return
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Pet'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Pet'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Pet not found
+      security:
+      - api_key: []
+      summary: Find pet by ID
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    post:
+      operationId: updatePetWithForm
+      parameters:
+      - description: ID of pet that needs to be updated
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                name:
+                  description: Updated name of the pet
+                  type: string
+                status:
+                  description: Updated status of the pet
+                  type: string
+      responses:
+        "405":
+          content: {}
+          description: Invalid input
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Updates a pet in the store with form data
+      tags:
+      - pet
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/{petId}/uploadImage:
+    post:
+      operationId: uploadFile
+      parameters:
+      - description: ID of pet to update
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                additionalMetadata:
+                  description: Additional data to pass to server
+                  type: string
+                file:
+                  description: file to upload
+                  format: binary
+                  type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiResponse'
+          description: successful operation
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: uploads an image
+      tags:
+      - pet
+      x-contentType: multipart/form-data
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /store/inventory:
+    get:
+      description: Returns a map of status codes to quantities
+      operationId: getInventory
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                additionalProperties:
+                  format: int32
+                  type: integer
+                type: object
+          description: successful operation
+      security:
+      - api_key: []
+      summary: Returns pet inventories by status
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /store/order:
+    post:
+      operationId: placeOrder
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/Order'
+        description: order placed for purchasing the pet
+        required: true
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Order'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Order'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid Order
+      summary: Place an order for a pet
+      tags:
+      - store
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /store/order/{order_id}:
+    delete:
+      description: For valid response try integer IDs with value < 1000. Anything
+        above 1000 or nonintegers will generate API errors
+      operationId: deleteOrder
+      parameters:
+      - description: ID of the order that needs to be deleted
+        in: path
+        name: order_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Order not found
+      summary: Delete purchase order by ID
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+    get:
+      description: For valid response try integer IDs with value <= 5 or > 10. Other
+        values will generated exceptions
+      operationId: getOrderById
+      parameters:
+      - description: ID of pet that needs to be fetched
+        in: path
+        name: order_id
+        required: true
+        schema:
+          format: int64
+          maximum: 5
+          minimum: 1
+          type: integer
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Order'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Order'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Order not found
+      summary: Find purchase order by ID
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /user:
+    post:
+      description: This can only be done by the logged in user.
+      operationId: createUser
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/User'
+        description: Created user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Create user
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/createWithArray:
+    post:
+      operationId: createUsersWithArrayInput
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                $ref: '#/components/schemas/User'
+              type: array
+        description: List of user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Creates list of users with given input array
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/createWithList:
+    post:
+      operationId: createUsersWithListInput
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                $ref: '#/components/schemas/User'
+              type: array
+        description: List of user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Creates list of users with given input array
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/login:
+    get:
+      operationId: loginUser
+      parameters:
+      - description: The user name for login
+        in: query
+        name: username
+        required: true
+        schema:
+          type: string
+      - description: The password for login in clear text
+        in: query
+        name: password
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                type: string
+            application/json:
+              schema:
+                type: string
+          description: successful operation
+          headers:
+            X-Rate-Limit:
+              description: calls per hour allowed by the user
+              schema:
+                format: int32
+                type: integer
+            X-Expires-After:
+              description: date in UTC when token expires
+              schema:
+                format: date-time
+                type: string
+        "400":
+          content: {}
+          description: Invalid username/password supplied
+      summary: Logs user into the system
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/logout:
+    get:
+      operationId: logoutUser
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Logs out current logged in user session
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/{username}:
+    delete:
+      description: This can only be done by the logged in user.
+      operationId: deleteUser
+      parameters:
+      - description: The name that needs to be deleted
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Delete user
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+    get:
+      operationId: getUserByName
+      parameters:
+      - description: The name that needs to be fetched. Use user1 for testing.
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/User'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/User'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Get user by user name
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+    put:
+      description: This can only be done by the logged in user.
+      operationId: updateUser
+      parameters:
+      - description: name that need to be deleted
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/User'
+        description: Updated user object
+        required: true
+      responses:
+        "400":
+          content: {}
+          description: Invalid user supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Updated user
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /fake_classname_test:
+    patch:
+      description: To test class name in snake case
+      operationId: testClassname
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      security:
+      - api_key_query: []
+      summary: To test class name in snake case
+      tags:
+      - fake_classname_tags 123#$%^
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake_classname_tags 123#$%^
+  /fake:
+    delete:
+      description: Fake endpoint to test group parameters (optional)
+      operationId: testGroupParameters
+      parameters:
+      - description: Required String in group parameters
+        in: query
+        name: required_string_group
+        required: true
+        schema:
+          type: integer
+      - description: Required Boolean in group parameters
+        in: header
+        name: required_boolean_group
+        required: true
+        schema:
+          type: boolean
+      - description: Required Integer in group parameters
+        in: query
+        name: required_int64_group
+        required: true
+        schema:
+          format: int64
+          type: integer
+      - description: String in group parameters
+        in: query
+        name: string_group
+        schema:
+          type: integer
+      - description: Boolean in group parameters
+        in: header
+        name: boolean_group
+        schema:
+          type: boolean
+      - description: Integer in group parameters
+        in: query
+        name: int64_group
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "400":
+          content: {}
+          description: Someting wrong
+      summary: Fake endpoint to test group parameters (optional)
+      tags:
+      - fake
+      x-group-parameters: true
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    get:
+      description: To test enum parameters
+      operationId: testEnumParameters
+      parameters:
+      - description: Header parameter enum test (string array)
+        explode: false
+        in: header
+        name: enum_header_string_array
+        schema:
+          items:
+            default: $
+            enum:
+            - '>'
+            - $
+            type: string
+          type: array
+        style: simple
+      - description: Header parameter enum test (string)
+        in: header
+        name: enum_header_string
+        schema:
+          default: -efg
+          enum:
+          - _abc
+          - -efg
+          - (xyz)
+          type: string
+      - description: Query parameter enum test (string array)
+        explode: false
+        in: query
+        name: enum_query_string_array
+        schema:
+          items:
+            default: $
+            enum:
+            - '>'
+            - $
+            type: string
+          type: array
+        style: form
+      - description: Query parameter enum test (string)
+        in: query
+        name: enum_query_string
+        schema:
+          default: -efg
+          enum:
+          - _abc
+          - -efg
+          - (xyz)
+          type: string
+      - description: Query parameter enum test (double)
+        in: query
+        name: enum_query_integer
+        schema:
+          enum:
+          - 1
+          - -2
+          format: int32
+          type: integer
+      - description: Query parameter enum test (double)
+        in: query
+        name: enum_query_double
+        schema:
+          enum:
+          - 1.1
+          - -1.2
+          format: double
+          type: number
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                enum_form_string_array:
+                  description: Form parameter enum test (string array)
+                  items:
+                    default: $
+                    enum:
+                    - '>'
+                    - $
+                    type: string
+                  type: array
+                enum_form_string:
+                  default: -efg
+                  description: Form parameter enum test (string)
+                  enum:
+                  - _abc
+                  - -efg
+                  - (xyz)
+                  type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid request
+        "404":
+          content: {}
+          description: Not found
+      summary: To test enum parameters
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    patch:
+      description: To test "client" model
+      operationId: testClientModel
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      summary: To test "client" model
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    post:
+      description: |-
+        Fake endpoint for testing various parameters
+         假端點
+         偽のエンドポイント
+         가짜 엔드 포인트
+      operationId: testEndpointParameters
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                integer:
+                  description: None
+                  format: int32
+                  maximum: 100
+                  minimum: 10
+                  type: integer
+                int32:
+                  description: None
+                  format: int32
+                  maximum: 200
+                  minimum: 20
+                  type: integer
+                int64:
+                  description: None
+                  format: int64
+                  type: integer
+                number:
+                  description: None
+                  maximum: 543.2
+                  minimum: 32.1
+                  type: number
+                float:
+                  description: None
+                  format: float
+                  maximum: 987.6
+                  type: number
+                double:
+                  description: None
+                  format: double
+                  maximum: 123.4
+                  minimum: 67.8
+                  type: number
+                string:
+                  description: None
+                  pattern: /[a-z]/i
+                  type: string
+                pattern_without_delimiter:
+                  description: None
+                  pattern: ^[A-Z].*
+                  type: string
+                byte:
+                  description: None
+                  format: byte
+                  type: string
+                binary:
+                  description: None
+                  format: binary
+                  type: string
+                date:
+                  description: None
+                  format: date
+                  type: string
+                dateTime:
+                  description: None
+                  format: date-time
+                  type: string
+                password:
+                  description: None
+                  format: password
+                  maxLength: 64
+                  minLength: 10
+                  type: string
+                callback:
+                  description: None
+                  type: string
+              required:
+              - byte
+              - double
+              - number
+              - pattern_without_delimiter
+        required: true
+      responses:
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      security:
+      - http_basic_test: []
+      summary: |-
+        Fake endpoint for testing various parameters
+         假端點
+         偽のエンドポイント
+         가짜 엔드 포인트
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/outer/number:
+    post:
+      description: Test serialization of outer number types
+      operationId: fakeOuterNumberSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterNumber'
+        description: Input number as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterNumber'
+          description: Output number
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/string:
+    post:
+      description: Test serialization of outer string types
+      operationId: fakeOuterStringSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterString'
+        description: Input string as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterString'
+          description: Output string
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/boolean:
+    post:
+      description: Test serialization of outer boolean types
+      operationId: fakeOuterBooleanSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterBoolean'
+        description: Input boolean as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterBoolean'
+          description: Output boolean
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/composite:
+    post:
+      description: Test serialization of object with outer number type
+      operationId: fakeOuterCompositeSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterComposite'
+        description: Input composite as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterComposite'
+          description: Output composite
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/jsonFormData:
+    get:
+      operationId: testJsonFormData
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                param:
+                  description: field1
+                  type: string
+                param2:
+                  description: field2
+                  type: string
+              required:
+              - param
+              - param2
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: test json serialization of form data
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/inline-additionalProperties:
+    post:
+      operationId: testInlineAdditionalProperties
+      requestBody:
+        content:
+          application/json:
+            schema:
+              additionalProperties:
+                type: string
+              type: object
+        description: request body
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: test inline additionalProperties
+      tags:
+      - fake
+      x-codegen-request-body-name: param
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/body-with-query-params:
+    put:
+      operationId: testBodyWithQueryParams
+      parameters:
+      - in: query
+        name: query
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/User'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/create_xml_item:
+    post:
+      description: this route creates an XmlItem
+      operationId: createXmlItem
+      requestBody:
+        content:
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          application/xml; charset=utf-8:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          application/xml; charset=utf-16:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml; charset=utf-8:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml; charset=utf-16:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+        description: XmlItem Body
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: creates an XmlItem
+      tags:
+      - fake
+      x-codegen-request-body-name: XmlItem
+      x-contentType: application/xml
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /another-fake/dummy:
+    patch:
+      description: To test special tags and operation ID starting with number
+      operationId: 123_test_@#$%_special_tags
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      summary: To test special tags
+      tags:
+      - $another-fake?
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: $another-fake?
+  /fake/body-with-file-schema:
+    put:
+      description: For this test, the body for this request much reference a schema
+        named `File`.
+      operationId: testBodyWithFileSchema
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/FileSchemaTestClass'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/test-query-parameters:
+    put:
+      description: To test the collection format in query parameters
+      operationId: testQueryParameterCollectionFormat
+      parameters:
+      - explode: false
+        in: query
+        name: pipe
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - in: query
+        name: ioutil
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+      - in: query
+        name: http
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: spaceDelimited
+      - explode: false
+        in: query
+        name: url
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - explode: true
+        in: query
+        name: context
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/{petId}/uploadImageWithRequiredFile:
+    post:
+      operationId: uploadFileWithRequiredFile
+      parameters:
+      - description: ID of pet to update
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                additionalMetadata:
+                  description: Additional data to pass to server
+                  type: string
+                requiredFile:
+                  description: file to upload
+                  format: binary
+                  type: string
+              required:
+              - requiredFile
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiResponse'
+          description: successful operation
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: uploads an image (required)
+      tags:
+      - pet
+      x-contentType: multipart/form-data
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+components:
+  schemas:
+    Order:
+      example:
+        petId: 6
+        quantity: 1
+        id: 0
+        shipDate: 2000-01-23T04:56:07.000+00:00
+        complete: false
+        status: placed
+      properties:
+        id:
+          format: int64
+          type: integer
+        petId:
+          format: int64
+          type: integer
+        quantity:
+          format: int32
+          type: integer
+        shipDate:
+          format: date-time
+          type: string
+        status:
+          description: Order Status
+          enum:
+          - placed
+          - approved
+          - delivered
+          type: string
+        complete:
+          default: false
+          type: boolean
+      type: object
+      xml:
+        name: Order
+    Category:
+      example:
+        name: default-name
+        id: 6
+      properties:
+        id:
+          format: int64
+          type: integer
+        name:
+          default: default-name
+          type: string
+      required:
+      - name
+      type: object
+      xml:
+        name: Category
+    User:
+      example:
+        firstName: firstName
+        lastName: lastName
+        password: password
+        userStatus: 6
+        phone: phone
+        id: 0
+        email: email
+        username: username
+      properties:
+        id:
+          format: int64
+          type: integer
+          x-is-unique: true
+        username:
+          type: string
+        firstName:
+          type: string
+        lastName:
+          type: string
+        email:
+          type: string
+        password:
+          type: string
+        phone:
+          type: string
+        userStatus:
+          description: User Status
+          format: int32
+          type: integer
+      type: object
+      xml:
+        name: User
+    Tag:
+      example:
+        name: name
+        id: 1
+      properties:
+        id:
+          format: int64
+          type: integer
+        name:
+          type: string
+      type: object
+      xml:
+        name: Tag
+    Pet:
+      example:
+        photoUrls:
+        - photoUrls
+        - photoUrls
+        name: doggie
+        id: 0
+        category:
+          name: default-name
+          id: 6
+        tags:
+        - name: name
+          id: 1
+        - name: name
+          id: 1
+        status: available
+      properties:
+        id:
+          format: int64
+          type: integer
+          x-is-unique: true
+        category:
+          $ref: '#/components/schemas/Category'
+        name:
+          example: doggie
+          type: string
+        photoUrls:
+          items:
+            type: string
+          type: array
+          uniqueItems: true
+          xml:
+            name: photoUrl
+            wrapped: true
+        tags:
+          items:
+            $ref: '#/components/schemas/Tag'
+          type: array
+          xml:
+            name: tag
+            wrapped: true
+        status:
+          description: pet status in the store
+          enum:
+          - available
+          - pending
+          - sold
+          type: string
+      required:
+      - name
+      - photoUrls
+      type: object
+      xml:
+        name: Pet
+    ApiResponse:
+      example:
+        code: 0
+        type: type
+        message: message
+      properties:
+        code:
+          format: int32
+          type: integer
+        type:
+          type: string
+        message:
+          type: string
+      type: object
+    $special[model.name]:
+      properties:
+        $special[property.name]:
+          format: int64
+          type: integer
+      type: object
+      xml:
+        name: $special[model.name]
+    Return:
+      description: Model for testing reserved words
+      properties:
+        return:
+          format: int32
+          type: integer
+      type: object
+      xml:
+        name: Return
+    Name:
+      description: Model for testing model name same as property name
+      properties:
+        name:
+          format: int32
+          type: integer
+        snake_case:
+          format: int32
+          readOnly: true
+          type: integer
+        property:
+          type: string
+        "123Number":
+          readOnly: true
+          type: integer
+      required:
+      - name
+      type: object
+      xml:
+        name: Name
+    "200_response":
+      description: Model for testing model name starting with number
+      properties:
+        name:
+          format: int32
+          type: integer
+        class:
+          type: string
+      type: object
+      xml:
+        name: Name
+    ClassModel:
+      description: Model for testing model with "_class" property
+      properties:
+        _class:
+          type: string
+      type: object
+    Dog:
+      allOf:
+      - $ref: '#/components/schemas/Animal'
+      - $ref: '#/components/schemas/Dog_allOf'
+    Cat:
+      allOf:
+      - $ref: '#/components/schemas/Animal'
+      - $ref: '#/components/schemas/Cat_allOf'
+    BigCat:
+      allOf:
+      - $ref: '#/components/schemas/Cat'
+      - $ref: '#/components/schemas/BigCat_allOf'
+    Animal:
+      discriminator:
+        propertyName: className
+      properties:
+        className:
+          type: string
+        color:
+          default: red
+          type: string
+      required:
+      - className
+      type: object
+    AnimalFarm:
+      items:
+        $ref: '#/components/schemas/Animal'
+      type: array
+    format_test:
+      properties:
+        integer:
+          maximum: 1E+2
+          minimum: 1E+1
+          type: integer
+        int32:
+          format: int32
+          maximum: 2E+2
+          minimum: 2E+1
+          type: integer
+        int64:
+          format: int64
+          type: integer
+        number:
+          maximum: 543.2
+          minimum: 32.1
+          type: number
+        float:
+          format: float
+          maximum: 987.6
+          minimum: 54.3
+          type: number
+        double:
+          format: double
+          maximum: 123.4
+          minimum: 67.8
+          type: number
+        string:
+          pattern: /[a-z]/i
+          type: string
+        byte:
+          format: byte
+          pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
+          type: string
+        binary:
+          format: binary
+          type: string
+        date:
+          format: date
+          type: string
+        dateTime:
+          format: date-time
+          type: string
+        uuid:
+          example: 72f98069-206d-4f12-9f12-3d1e525a8e84
+          format: uuid
+          type: string
+        password:
+          format: password
+          maxLength: 64
+          minLength: 10
+          type: string
+        BigDecimal:
+          format: number
+          type: string
+      required:
+      - byte
+      - date
+      - number
+      - password
+      type: object
+    EnumClass:
+      default: -efg
+      enum:
+      - _abc
+      - -efg
+      - (xyz)
+      type: string
+    Enum_Test:
+      properties:
+        enum_string:
+          enum:
+          - UPPER
+          - lower
+          - ""
+          type: string
+        enum_string_required:
+          enum:
+          - UPPER
+          - lower
+          - ""
+          type: string
+        enum_integer:
+          enum:
+          - 1
+          - -1
+          format: int32
+          type: integer
+        enum_number:
+          enum:
+          - 1.1
+          - -1.2
+          format: double
+          type: number
+        outerEnum:
+          $ref: '#/components/schemas/OuterEnum'
+      required:
+      - enum_string_required
+      type: object
+    AdditionalPropertiesClass:
+      properties:
+        map_string:
+          additionalProperties:
+            type: string
+          type: object
+        map_number:
+          additionalProperties:
+            type: number
+          type: object
+        map_integer:
+          additionalProperties:
+            type: integer
+          type: object
+        map_boolean:
+          additionalProperties:
+            type: boolean
+          type: object
+        map_array_integer:
+          additionalProperties:
+            items:
+              type: integer
+            type: array
+          type: object
+        map_array_anytype:
+          additionalProperties:
+            items:
+              properties: {}
+              type: object
+            type: array
+          type: object
+        map_map_string:
+          additionalProperties:
+            additionalProperties:
+              type: string
+            type: object
+          type: object
+        map_map_anytype:
+          additionalProperties:
+            additionalProperties:
+              properties: {}
+              type: object
+            type: object
+          type: object
+        anytype_1:
+          properties: {}
+          type: object
+        anytype_2:
+          type: object
+        anytype_3:
+          properties: {}
+          type: object
+      type: object
+    AdditionalPropertiesString:
+      additionalProperties:
+        type: string
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesInteger:
+      additionalProperties:
+        type: integer
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesNumber:
+      additionalProperties:
+        type: number
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesBoolean:
+      additionalProperties:
+        type: boolean
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesArray:
+      additionalProperties:
+        items:
+          properties: {}
+          type: object
+        type: array
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesObject:
+      additionalProperties:
+        additionalProperties:
+          properties: {}
+          type: object
+        type: object
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesAnyType:
+      additionalProperties:
+        properties: {}
+        type: object
+      properties:
+        name:
+          type: string
+      type: object
+    MixedPropertiesAndAdditionalPropertiesClass:
+      properties:
+        uuid:
+          format: uuid
+          type: string
+        dateTime:
+          format: date-time
+          type: string
+        map:
+          additionalProperties:
+            $ref: '#/components/schemas/Animal'
+          type: object
+      type: object
+    List:
+      properties:
+        "123-list":
+          type: string
+      type: object
+    Client:
+      example:
+        client: client
+      properties:
+        client:
+          type: string
+      type: object
+    ReadOnlyFirst:
+      properties:
+        bar:
+          readOnly: true
+          type: string
+        baz:
+          type: string
+      type: object
+    hasOnlyReadOnly:
+      properties:
+        bar:
+          readOnly: true
+          type: string
+        foo:
+          readOnly: true
+          type: string
+      type: object
+    Capitalization:
+      properties:
+        smallCamel:
+          type: string
+        CapitalCamel:
+          type: string
+        small_Snake:
+          type: string
+        Capital_Snake:
+          type: string
+        SCA_ETH_Flow_Points:
+          type: string
+        ATT_NAME:
+          description: |
+            Name of the pet
+          type: string
+      type: object
+    MapTest:
+      properties:
+        map_map_of_string:
+          additionalProperties:
+            additionalProperties:
+              type: string
+            type: object
+          type: object
+        map_of_enum_string:
+          additionalProperties:
+            enum:
+            - UPPER
+            - lower
+            type: string
+          type: object
+        direct_map:
+          additionalProperties:
+            type: boolean
+          type: object
+        indirect_map:
+          additionalProperties:
+            type: boolean
+          type: object
+      type: object
+    ArrayTest:
+      properties:
+        array_of_string:
+          items:
+            type: string
+          type: array
+        array_array_of_integer:
+          items:
+            items:
+              format: int64
+              type: integer
+            type: array
+          type: array
+        array_array_of_model:
+          items:
+            items:
+              $ref: '#/components/schemas/ReadOnlyFirst'
+            type: array
+          type: array
+      type: object
+    NumberOnly:
+      properties:
+        JustNumber:
+          type: number
+      type: object
+    ArrayOfNumberOnly:
+      properties:
+        ArrayNumber:
+          items:
+            type: number
+          type: array
+      type: object
+    ArrayOfArrayOfNumberOnly:
+      properties:
+        ArrayArrayNumber:
+          items:
+            items:
+              type: number
+            type: array
+          type: array
+      type: object
+    EnumArrays:
+      properties:
+        just_symbol:
+          enum:
+          - '>='
+          - $
+          type: string
+        array_enum:
+          items:
+            enum:
+            - fish
+            - crab
+            type: string
+          type: array
+      type: object
+    OuterEnum:
+      enum:
+      - placed
+      - approved
+      - delivered
+      type: string
+    OuterComposite:
+      example:
+        my_string: my_string
+        my_number: 0.8008281904610115
+        my_boolean: true
+      properties:
+        my_number:
+          type: number
+        my_string:
+          type: string
+        my_boolean:
+          type: boolean
+          x-codegen-body-parameter-name: boolean_post_body
+      type: object
+    OuterNumber:
+      type: number
+    OuterString:
+      type: string
+    OuterBoolean:
+      type: boolean
+      x-codegen-body-parameter-name: boolean_post_body
+    StringBooleanMap:
+      additionalProperties:
+        type: boolean
+      type: object
+    FileSchemaTestClass:
+      example:
+        file:
+          sourceURI: sourceURI
+        files:
+        - sourceURI: sourceURI
+        - sourceURI: sourceURI
+      properties:
+        file:
+          $ref: '#/components/schemas/File'
+        files:
+          items:
+            $ref: '#/components/schemas/File'
+          type: array
+      type: object
+    File:
+      description: Must be named `File` for test.
+      example:
+        sourceURI: sourceURI
+      properties:
+        sourceURI:
+          description: Test capitalization
+          type: string
+      type: object
+    TypeHolderDefault:
+      properties:
+        string_item:
+          default: what
+          type: string
+        number_item:
+          type: number
+        integer_item:
+          type: integer
+        bool_item:
+          default: true
+          type: boolean
+        array_item:
+          items:
+            type: integer
+          type: array
+      required:
+      - array_item
+      - bool_item
+      - integer_item
+      - number_item
+      - string_item
+      type: object
+    TypeHolderExample:
+      properties:
+        string_item:
+          example: what
+          type: string
+        number_item:
+          example: 1.234
+          type: number
+        float_item:
+          example: 1.234
+          format: float
+          type: number
+        integer_item:
+          example: -2
+          type: integer
+        bool_item:
+          example: true
+          type: boolean
+        array_item:
+          example:
+          - 0
+          - 1
+          - 2
+          - 3
+          items:
+            type: integer
+          type: array
+      required:
+      - array_item
+      - bool_item
+      - float_item
+      - integer_item
+      - number_item
+      - string_item
+      type: object
+    XmlItem:
+      properties:
+        attribute_string:
+          example: string
+          type: string
+          xml:
+            attribute: true
+        attribute_number:
+          example: 1.234
+          type: number
+          xml:
+            attribute: true
+        attribute_integer:
+          example: -2
+          type: integer
+          xml:
+            attribute: true
+        attribute_boolean:
+          example: true
+          type: boolean
+          xml:
+            attribute: true
+        wrapped_array:
+          items:
+            type: integer
+          type: array
+          xml:
+            wrapped: true
+        name_string:
+          example: string
+          type: string
+          xml:
+            name: xml_name_string
+        name_number:
+          example: 1.234
+          type: number
+          xml:
+            name: xml_name_number
+        name_integer:
+          example: -2
+          type: integer
+          xml:
+            name: xml_name_integer
+        name_boolean:
+          example: true
+          type: boolean
+          xml:
+            name: xml_name_boolean
+        name_array:
+          items:
+            type: integer
+            xml:
+              name: xml_name_array_item
+          type: array
+        name_wrapped_array:
+          items:
+            type: integer
+            xml:
+              name: xml_name_wrapped_array_item
+          type: array
+          xml:
+            name: xml_name_wrapped_array
+            wrapped: true
+        prefix_string:
+          example: string
+          type: string
+          xml:
+            prefix: ab
+        prefix_number:
+          example: 1.234
+          type: number
+          xml:
+            prefix: cd
+        prefix_integer:
+          example: -2
+          type: integer
+          xml:
+            prefix: ef
+        prefix_boolean:
+          example: true
+          type: boolean
+          xml:
+            prefix: gh
+        prefix_array:
+          items:
+            type: integer
+            xml:
+              prefix: ij
+          type: array
+        prefix_wrapped_array:
+          items:
+            type: integer
+            xml:
+              prefix: mn
+          type: array
+          xml:
+            prefix: kl
+            wrapped: true
+        namespace_string:
+          example: string
+          type: string
+          xml:
+            namespace: http://a.com/schema
+        namespace_number:
+          example: 1.234
+          type: number
+          xml:
+            namespace: http://b.com/schema
+        namespace_integer:
+          example: -2
+          type: integer
+          xml:
+            namespace: http://c.com/schema
+        namespace_boolean:
+          example: true
+          type: boolean
+          xml:
+            namespace: http://d.com/schema
+        namespace_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://e.com/schema
+          type: array
+        namespace_wrapped_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://g.com/schema
+          type: array
+          xml:
+            namespace: http://f.com/schema
+            wrapped: true
+        prefix_ns_string:
+          example: string
+          type: string
+          xml:
+            namespace: http://a.com/schema
+            prefix: a
+        prefix_ns_number:
+          example: 1.234
+          type: number
+          xml:
+            namespace: http://b.com/schema
+            prefix: b
+        prefix_ns_integer:
+          example: -2
+          type: integer
+          xml:
+            namespace: http://c.com/schema
+            prefix: c
+        prefix_ns_boolean:
+          example: true
+          type: boolean
+          xml:
+            namespace: http://d.com/schema
+            prefix: d
+        prefix_ns_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://e.com/schema
+              prefix: e
+          type: array
+        prefix_ns_wrapped_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://g.com/schema
+              prefix: g
+          type: array
+          xml:
+            namespace: http://f.com/schema
+            prefix: f
+            wrapped: true
+      type: object
+      xml:
+        namespace: http://a.com/schema
+        prefix: pre
+    Dog_allOf:
+      properties:
+        breed:
+          type: string
+      type: object
+    Cat_allOf:
+      properties:
+        declawed:
+          type: boolean
+      type: object
+    BigCat_allOf:
+      properties:
+        kind:
+          enum:
+          - lions
+          - tigers
+          - leopards
+          - jaguars
+          type: string
+      type: object
+  securitySchemes:
+    petstore_auth:
+      flows:
+        implicit:
+          authorizationUrl: http://petstore.swagger.io/api/oauth/dialog
+          scopes:
+            write:pets: modify pets in your account
+            read:pets: read your pets
+      type: oauth2
+    api_key:
+      in: header
+      name: api_key
+      type: apiKey
+    api_key_query:
+      in: query
+      name: api_key_query
+      type: apiKey
+    http_basic_test:
+      scheme: basic
+      type: http
+x-original-swagger-version: "2.0"
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/.openapi-generator-ignore b/samples/openapi3/server/petstore/springboot-useoptional/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/.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/openapi3/server/petstore/springboot-useoptional/.openapi-generator/FILES b/samples/openapi3/server/petstore/springboot-useoptional/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..e4c32719b541ab37b408dd5bd08d6eb41609d79d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/.openapi-generator/FILES
@@ -0,0 +1,66 @@
+README.md
+pom.xml
+src/main/java/org/openapitools/OpenAPI2SpringBoot.java
+src/main/java/org/openapitools/RFC3339DateFormat.java
+src/main/java/org/openapitools/api/AnotherFakeApi.java
+src/main/java/org/openapitools/api/AnotherFakeApiController.java
+src/main/java/org/openapitools/api/ApiUtil.java
+src/main/java/org/openapitools/api/FakeApi.java
+src/main/java/org/openapitools/api/FakeApiController.java
+src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
+src/main/java/org/openapitools/api/PetApi.java
+src/main/java/org/openapitools/api/PetApiController.java
+src/main/java/org/openapitools/api/StoreApi.java
+src/main/java/org/openapitools/api/StoreApiController.java
+src/main/java/org/openapitools/api/UserApi.java
+src/main/java/org/openapitools/api/UserApiController.java
+src/main/java/org/openapitools/configuration/HomeController.java
+src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
+src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
+src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
+src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
+src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
+src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
+src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
+src/main/java/org/openapitools/model/AdditionalPropertiesString.java
+src/main/java/org/openapitools/model/Animal.java
+src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
+src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
+src/main/java/org/openapitools/model/ArrayTest.java
+src/main/java/org/openapitools/model/BigCat.java
+src/main/java/org/openapitools/model/BigCatAllOf.java
+src/main/java/org/openapitools/model/Capitalization.java
+src/main/java/org/openapitools/model/Cat.java
+src/main/java/org/openapitools/model/CatAllOf.java
+src/main/java/org/openapitools/model/Category.java
+src/main/java/org/openapitools/model/ClassModel.java
+src/main/java/org/openapitools/model/Client.java
+src/main/java/org/openapitools/model/Dog.java
+src/main/java/org/openapitools/model/DogAllOf.java
+src/main/java/org/openapitools/model/EnumArrays.java
+src/main/java/org/openapitools/model/EnumClass.java
+src/main/java/org/openapitools/model/EnumTest.java
+src/main/java/org/openapitools/model/FileSchemaTestClass.java
+src/main/java/org/openapitools/model/FormatTest.java
+src/main/java/org/openapitools/model/HasOnlyReadOnly.java
+src/main/java/org/openapitools/model/MapTest.java
+src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
+src/main/java/org/openapitools/model/Model200Response.java
+src/main/java/org/openapitools/model/ModelApiResponse.java
+src/main/java/org/openapitools/model/ModelReturn.java
+src/main/java/org/openapitools/model/Name.java
+src/main/java/org/openapitools/model/NumberOnly.java
+src/main/java/org/openapitools/model/Order.java
+src/main/java/org/openapitools/model/OuterComposite.java
+src/main/java/org/openapitools/model/OuterEnum.java
+src/main/java/org/openapitools/model/Pet.java
+src/main/java/org/openapitools/model/ReadOnlyFirst.java
+src/main/java/org/openapitools/model/SpecialModelName.java
+src/main/java/org/openapitools/model/Tag.java
+src/main/java/org/openapitools/model/TypeHolderDefault.java
+src/main/java/org/openapitools/model/TypeHolderExample.java
+src/main/java/org/openapitools/model/User.java
+src/main/java/org/openapitools/model/XmlItem.java
+src/main/resources/application.properties
+src/main/resources/openapi.yaml
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/.openapi-generator/VERSION b/samples/openapi3/server/petstore/springboot-useoptional/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..0984c4c1ad213d3a352049ad557efc9bd5140752
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/README.md b/samples/openapi3/server/petstore/springboot-useoptional/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..befc961488ae17cb2251c0931e29378526fd41ce
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/README.md
@@ -0,0 +1,16 @@
+# OpenAPI generated server
+
+Spring Boot Server
+
+
+## Overview
+This server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
+By using the [OpenAPI-Spec](https://openapis.org), you can easily generate a server stub.
+This is an example of building a OpenAPI-enabled server in Java using the SpringBoot framework.
+
+Start your server as a simple java application
+
+You can view the api documentation in swagger-ui by pointing to
+http://localhost:80/
+
+Change default port value in application.properties
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/pom.xml b/samples/openapi3/server/petstore/springboot-useoptional/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..800e0576cb5082bd48a57c1392d54762d066a8f5
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/pom.xml
@@ -0,0 +1,71 @@
+<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.openapi3</groupId>
+    <artifactId>spring-boot-useoptional</artifactId>
+    <packaging>jar</packaging>
+    <name>spring-boot-useoptional</name>
+    <version>1.0.0</version>
+    <properties>
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>2.1.11</swagger-core-version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.5.8</version>
+    </parent>
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>${swagger-core-version}</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.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>0.2.2</version>
+        </dependency>
+        <!-- Bean Validation API support -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/OpenAPI2SpringBoot.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/OpenAPI2SpringBoot.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb088f4519352303a48b18ebbdd5ed9a0003ed73
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/OpenAPI2SpringBoot.java
@@ -0,0 +1,63 @@
+package org.openapitools;
+
+import com.fasterxml.jackson.databind.Module;
+import org.openapitools.jackson.nullable.JsonNullableModule;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.ExitCodeGenerator;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@SpringBootApplication
+@ComponentScan(basePackages = {"org.openapitools", "org.openapitools.api" , "org.openapitools.configuration"})
+public class OpenAPI2SpringBoot implements CommandLineRunner {
+
+    @Override
+    public void run(String... arg0) throws Exception {
+        if (arg0.length > 0 && arg0[0].equals("exitcode")) {
+            throw new ExitException();
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        new SpringApplication(OpenAPI2SpringBoot.class).run(args);
+    }
+
+    static class ExitException extends RuntimeException implements ExitCodeGenerator {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public int getExitCode() {
+            return 10;
+        }
+
+    }
+
+    @Bean
+    public WebMvcConfigurer webConfigurer() {
+        return new WebMvcConfigurer() {
+            /*@Override
+            public void addCorsMappings(CorsRegistry registry) {
+                registry.addMapping("/**")
+                        .allowedOrigins("*")
+                        .allowedMethods("*")
+                        .allowedHeaders("Content-Type");
+            }*/
+
+            @Override
+            public void addResourceHandlers(ResourceHandlerRegistry registry) {
+                registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/3.14.2/");
+            }
+        };
+    }
+
+    @Bean
+    public Module jsonNullableModule() {
+        return new JsonNullableModule();
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/RFC3339DateFormat.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/RFC3339DateFormat.java
new file mode 100644
index 0000000000000000000000000000000000000000..bcd3936d8b343ef7553782b552e9798b69bc5a02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/RFC3339DateFormat.java
@@ -0,0 +1,38 @@
+package org.openapitools;
+
+import com.fasterxml.jackson.databind.util.StdDateFormat;
+
+import java.text.DateFormat;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+public class RFC3339DateFormat extends DateFormat {
+  private static final long serialVersionUID = 1L;
+  private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC");
+
+  private final StdDateFormat fmt = new StdDateFormat()
+          .withTimeZone(TIMEZONE_Z)
+          .withColonInTimeZone(true);
+
+  public RFC3339DateFormat() {
+    this.calendar = new GregorianCalendar();
+  }
+
+  @Override
+  public Date parse(String source, ParsePosition pos) {
+    return fmt.parse(source, pos);
+  }
+
+  @Override
+  public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
+    return fmt.format(date, toAppendTo, fieldPosition);
+  }
+
+  @Override
+  public Object clone() {
+    return this;
+  }
+}
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..ccd404fbf320f672255a389d4fbd109efb77f276
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -0,0 +1,75 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "another-fake", description = "the another-fake API")
+public interface AnotherFakeApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * PATCH /another-fake/dummy : To test special tags
+     * To test special tags and operation ID starting with number
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test special tags",
+        tags = { "$another-fake?" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/another-fake/dummy",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Client> call123testSpecialTags(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"client\" : \"client\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApiController.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..d8efcca7f8a47705edb4afb6de4a3cc183f81e61
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class AnotherFakeApiController implements AnotherFakeApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public AnotherFakeApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/ApiUtil.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/ApiUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..1245b1dd0ccf3cae51824d69fe4074d9acb576df
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/ApiUtil.java
@@ -0,0 +1,19 @@
+package org.openapitools.api;
+
+import org.springframework.web.context.request.NativeWebRequest;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class ApiUtil {
+    public static void setExampleResponse(NativeWebRequest req, String contentType, String example) {
+        try {
+            HttpServletResponse res = req.getNativeResponse(HttpServletResponse.class);
+            res.setCharacterEncoding("UTF-8");
+            res.addHeader("Content-Type", contentType);
+            res.getWriter().print(example);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..720457848da988024d9654cfe094ae35ce67f8c5
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java
@@ -0,0 +1,551 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.math.BigDecimal;
+import org.openapitools.model.Client;
+import org.openapitools.model.FileSchemaTestClass;
+import java.time.LocalDate;
+import java.util.Map;
+import org.openapitools.model.ModelApiResponse;
+import java.time.OffsetDateTime;
+import org.openapitools.model.OuterComposite;
+import org.openapitools.model.User;
+import org.openapitools.model.XmlItem;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "fake", description = "the fake API")
+public interface FakeApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /fake/create_xml_item : creates an XmlItem
+     * this route creates an XmlItem
+     *
+     * @param xmlItem XmlItem Body (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "creates an XmlItem",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/create_xml_item",
+        consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
+    )
+    default ResponseEntity<Void> createXmlItem(
+        @Parameter(name = "XmlItem", description = "XmlItem Body", required = true, schema = @Schema(description = "")) @Valid @RequestBody XmlItem xmlItem
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake/outer/boolean
+     * Test serialization of outer boolean types
+     *
+     * @param body Input boolean as post body (optional)
+     * @return Output boolean (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output boolean", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Boolean.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/boolean",
+        produces = { "*/*" }
+    )
+    default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
+        @Parameter(name = "body", description = "Input boolean as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) Boolean body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake/outer/composite
+     * Test serialization of object with outer number type
+     *
+     * @param body Input composite as post body (optional)
+     * @return Output composite (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output composite", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  OuterComposite.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/composite",
+        produces = { "*/*" }
+    )
+    default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
+        @Parameter(name = "body", description = "Input composite as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) OuterComposite body
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
+                    String exampleString = "{ \"my_string\" : \"my_string\", \"my_number\" : 0.8008281904610115, \"my_boolean\" : true }";
+                    ApiUtil.setExampleResponse(request, "*/*", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake/outer/number
+     * Test serialization of outer number types
+     *
+     * @param body Input number as post body (optional)
+     * @return Output number (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output number", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  BigDecimal.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/number",
+        produces = { "*/*" }
+    )
+    default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
+        @Parameter(name = "body", description = "Input number as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) BigDecimal body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake/outer/string
+     * Test serialization of outer string types
+     *
+     * @param body Input string as post body (optional)
+     * @return Output string (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Output string", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/outer/string",
+        produces = { "*/*" }
+    )
+    default ResponseEntity<String> fakeOuterStringSerialize(
+        @Parameter(name = "body", description = "Input string as post body", schema = @Schema(description = "")) @Valid @RequestBody(required = false) String body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PUT /fake/body-with-file-schema
+     * For this test, the body for this request much reference a schema named &#x60;File&#x60;.
+     *
+     * @param body  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/body-with-file-schema",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> testBodyWithFileSchema(
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody FileSchemaTestClass body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PUT /fake/body-with-query-params
+     *
+     * @param query  (required)
+     * @param body  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/body-with-query-params",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @Parameter(name = "query", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "query", required = true) String query,
+        @Parameter(name = "body", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PATCH /fake : To test \&quot;client\&quot; model
+     * To test \&quot;client\&quot; model
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test \"client\" model",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/fake",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Client> testClientModel(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"client\" : \"client\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake : Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     * Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트
+     *
+     * @param number None (required)
+     * @param _double None (required)
+     * @param patternWithoutDelimiter None (required)
+     * @param _byte None (required)
+     * @param integer None (optional)
+     * @param int32 None (optional)
+     * @param int64 None (optional)
+     * @param _float None (optional)
+     * @param string None (optional)
+     * @param binary None (optional)
+     * @param date None (optional)
+     * @param dateTime None (optional)
+     * @param password None (optional)
+     * @param paramCallback None (optional)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        },
+        security = {
+            @SecurityRequirement(name = "http_basic_test")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> testEndpointParameters(
+        @Parameter(name = "number", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @Parameter(name = "double", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @Parameter(name = "pattern_without_delimiter", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @Parameter(name = "byte", description = "None", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @Parameter(name = "integer", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @Parameter(name = "int32", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @Parameter(name = "int64", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @Parameter(name = "float", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "float", required = false) Float _float,
+        @Parameter(name = "string", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "string", required = false) String string,
+        @Parameter(name = "binary", description = "None", schema = @Schema(description = "")) @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @Parameter(name = "date", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @Parameter(name = "dateTime", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @Parameter(name = "password", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "password", required = false) String password,
+        @Parameter(name = "callback", description = "None", schema = @Schema(description = "")) @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /fake : To test enum parameters
+     * To test enum parameters
+     *
+     * @param enumHeaderStringArray Header parameter enum test (string array) (optional)
+     * @param enumHeaderString Header parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryStringArray Query parameter enum test (string array) (optional)
+     * @param enumQueryString Query parameter enum test (string) (optional, default to -efg)
+     * @param enumQueryInteger Query parameter enum test (double) (optional)
+     * @param enumQueryDouble Query parameter enum test (double) (optional)
+     * @param enumFormStringArray Form parameter enum test (string array) (optional, default to $)
+     * @param enumFormString Form parameter enum test (string) (optional, default to -efg)
+     * @return Invalid request (status code 400)
+     *         or Not found (status code 404)
+     */
+    @Operation(
+        summary = "To test enum parameters",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid request"),
+            @ApiResponse(responseCode = "404", description = "Not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/fake",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> testEnumParameters(
+        @Parameter(name = "enum_header_string_array", description = "Header parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @RequestHeader(value = "enum_header_string_array", required = false) Optional<List<String>> enumHeaderStringArray,
+        @Parameter(name = "enum_header_string", description = "Header parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @RequestHeader(value = "enum_header_string", required = false) Optional<String> enumHeaderString,
+        @Parameter(name = "enum_query_string_array", description = "Query parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestParam(value = "enum_query_string_array", required = false) Optional<List<String>> enumQueryStringArray,
+        @Parameter(name = "enum_query_string", description = "Query parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") Optional<String> enumQueryString,
+        @Parameter(name = "enum_query_integer", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1", "-2" })) @Valid @RequestParam(value = "enum_query_integer", required = false) Optional<Integer> enumQueryInteger,
+        @Parameter(name = "enum_query_double", description = "Query parameter enum test (double)", schema = @Schema(description = "", allowableValues = { "1.1", "-1.2" })) @Valid @RequestParam(value = "enum_query_double", required = false) Optional<Double> enumQueryDouble,
+        @Parameter(name = "enum_form_string_array", description = "Form parameter enum test (string array)", schema = @Schema(description = "", allowableValues = { ">", "$" })) @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @Parameter(name = "enum_form_string", description = "Form parameter enum test (string)", schema = @Schema(description = "", allowableValues = { "_abc", "-efg", "(xyz)" }, defaultValue = "-efg")) @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * DELETE /fake : Fake endpoint to test group parameters (optional)
+     * Fake endpoint to test group parameters (optional)
+     *
+     * @param requiredStringGroup Required String in group parameters (required)
+     * @param requiredBooleanGroup Required Boolean in group parameters (required)
+     * @param requiredInt64Group Required Integer in group parameters (required)
+     * @param stringGroup String in group parameters (optional)
+     * @param booleanGroup Boolean in group parameters (optional)
+     * @param int64Group Integer in group parameters (optional)
+     * @return Someting wrong (status code 400)
+     */
+    @Operation(
+        summary = "Fake endpoint to test group parameters (optional)",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Someting wrong")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/fake"
+    )
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @Parameter(name = "required_string_group", description = "Required String in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @Parameter(name = "required_boolean_group", description = "Required Boolean in group parameters", required = true, schema = @Schema(description = "")) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @Parameter(name = "required_int64_group", description = "Required Integer in group parameters", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @Parameter(name = "string_group", description = "String in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "string_group", required = false) Optional<Integer> stringGroup,
+        @Parameter(name = "boolean_group", description = "Boolean in group parameters", schema = @Schema(description = "")) @RequestHeader(value = "boolean_group", required = false) Optional<Boolean> booleanGroup,
+        @Parameter(name = "int64_group", description = "Integer in group parameters", schema = @Schema(description = "")) @Valid @RequestParam(value = "int64_group", required = false) Optional<Long> int64Group
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake/inline-additionalProperties : test inline additionalProperties
+     *
+     * @param param request body (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "test inline additionalProperties",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/inline-additionalProperties",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> testInlineAdditionalProperties(
+        @Parameter(name = "param", description = "request body", required = true, schema = @Schema(description = "")) @Valid @RequestBody Map<String, String> param
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /fake/jsonFormData : test json serialization of form data
+     *
+     * @param param field1 (required)
+     * @param param2 field2 (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "test json serialization of form data",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/fake/jsonFormData",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> testJsonFormData(
+        @Parameter(name = "param", description = "field1", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "param", required = true) String param,
+        @Parameter(name = "param2", description = "field2", required = true, schema = @Schema(description = "")) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PUT /fake/test-query-parameters
+     * To test the collection format in query parameters
+     *
+     * @param pipe  (required)
+     * @param ioutil  (required)
+     * @param http  (required)
+     * @param url  (required)
+     * @param context  (required)
+     * @return Success (status code 200)
+     */
+    @Operation(
+        summary = "",
+        tags = { "fake" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "Success")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/fake/test-query-parameters"
+    )
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @Parameter(name = "pipe", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @Parameter(name = "ioutil", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @Parameter(name = "http", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @Parameter(name = "url", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @Parameter(name = "context", description = "", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /fake/{petId}/uploadImageWithRequiredFile : uploads an image (required)
+     *
+     * @param petId ID of pet to update (required)
+     * @param requiredFile file to upload (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image (required)",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/fake/{petId}/uploadImageWithRequiredFile",
+        produces = { "application/json" },
+        consumes = { "multipart/form-data" }
+    )
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "requiredFile", description = "file to upload", required = true, schema = @Schema(description = "")) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApiController.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..c4b88419aabe82748c213c6b507f1928dfb6faef
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class FakeApiController implements FakeApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public FakeApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..62e378597251d2f90b80a70d731aa24fc7c1dfd3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -0,0 +1,78 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "fake_classname_test", description = "the fake_classname_test API")
+public interface FakeClassnameTestApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * PATCH /fake_classname_test : To test class name in snake case
+     * To test class name in snake case
+     *
+     * @param body client model (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "To test class name in snake case",
+        tags = { "fake_classname_tags 123#$%^" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Client.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key_query")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PATCH,
+        value = "/fake_classname_test",
+        produces = { "application/json" },
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Client> testClassname(
+        @Parameter(name = "body", description = "client model", required = true, schema = @Schema(description = "")) @Valid @RequestBody Client body
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"client\" : \"client\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..85458b255da584706093aa2e19acad06c9209ee2
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class FakeClassnameTestApiController implements FakeClassnameTestApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public FakeClassnameTestApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..f28b85a83435653983f4040251e14626a3f1b220
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java
@@ -0,0 +1,355 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.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 java.util.Set;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "pet", description = "the pet API")
+public interface PetApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Add a new pet to the store",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet",
+        consumes = { "application/json", "application/xml" }
+    )
+    default ResponseEntity<Void> addPet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @param apiKey  (optional)
+     * @return successful operation (status code 200)
+     *         or Invalid pet value (status code 400)
+     */
+    @Operation(
+        summary = "Deletes a pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "400", description = "Invalid pet value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/pet/{petId}"
+    )
+    default ResponseEntity<Void> deletePet(
+        @Parameter(name = "petId", description = "Pet id to delete", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "api_key", description = "", schema = @Schema(description = "")) @RequestHeader(value = "api_key", required = false) Optional<String> apiKey
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     */
+    @Operation(
+        summary = "Finds Pets by status",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid status value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByStatus",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<List<Pet>> findPetsByStatus(
+        @NotNull @Parameter(name = "status", description = "Status values that need to be considered for filter", required = true, schema = @Schema(description = "", allowableValues = { "available", "pending", "sold" })) @Valid @RequestParam(value = "status", required = true) List<String> status
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     */
+    @Operation(
+        summary = "Finds Pets by tags",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid tag value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByTags",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @Parameter(name = "tags", description = "Tags to filter by", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     */
+    @Operation(
+        summary = "Find pet by ID",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/{petId}",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Pet> getPetById(
+        @Parameter(name = "petId", description = "ID of pet to return", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param body Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     */
+    @Operation(
+        summary = "Update an existing pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation"),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found"),
+            @ApiResponse(responseCode = "405", description = "Validation exception")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/pet",
+        consumes = { "application/json", "application/xml" }
+    )
+    default ResponseEntity<Void> updatePet(
+        @Parameter(name = "body", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Updates a pet in the store with form data",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> updatePetWithForm(
+        @Parameter(name = "petId", description = "ID of pet that needs to be updated", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "name", description = "Updated name of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "name", required = false) String name,
+        @Parameter(name = "status", description = "Updated status of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "status", required = false) String status
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}/uploadImage",
+        produces = { "application/json" },
+        consumes = { "multipart/form-data" }
+    )
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @Parameter(name = "file", description = "file to upload", schema = @Schema(description = "")) @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApiController.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..e72c57e3cbec85aac1882dc1faac9beb651776b9
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class PetApiController implements PetApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public PetApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..de9b9d16f8305be92c6a7322d31b813f86feceac
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java
@@ -0,0 +1,183 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.Map;
+import org.openapitools.model.Order;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "store", description = "the store API")
+public interface StoreApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * DELETE /store/order/{order_id} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/store/order/{order_id}"
+    )
+    default ResponseEntity<Void> deleteOrder(
+        @Parameter(name = "order_id", description = "ID of the order that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("order_id") String orderId
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Returns pet inventories by status",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Map.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/inventory",
+        produces = { "application/json" }
+    )
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /store/order/{order_id} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Find purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/order/{order_id}",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @Parameter(name = "order_id", description = "ID of pet that needs to be fetched", required = true, schema = @Schema(description = "")) @PathVariable("order_id") Long orderId
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<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>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param body order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     */
+    @Operation(
+        summary = "Place an order for a pet",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid Order")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/store/order",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Order> placeOrder(
+        @Parameter(name = "body", description = "order placed for purchasing the pet", required = true, schema = @Schema(description = "")) @Valid @RequestBody Order body
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<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>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApiController.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..1293b5c8f6e4b7ac0041c3783a8add90811867ed
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class StoreApiController implements StoreApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public StoreApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..5a85648b515c6c121ab7525f61667d661e35b607
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java
@@ -0,0 +1,272 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.List;
+import java.time.OffsetDateTime;
+import org.openapitools.model.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "user", description = "the user API")
+public interface UserApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param body Created user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Create user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user"
+    )
+    default ResponseEntity<Void> createUser(
+        @Parameter(name = "body", description = "Created user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithArray"
+    )
+    default ResponseEntity<Void> createUsersWithArrayInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param body List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithList"
+    )
+    default ResponseEntity<Void> createUsersWithListInput(
+        @Parameter(name = "body", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/user/{username}"
+    )
+    default ResponseEntity<Void> deleteUser(
+        @Parameter(name = "username", description = "The name that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Get user by user name",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  User.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/{username}",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<User> getUserByName(
+        @Parameter(name = "username", description = "The name that needs to be fetched. Use user1 for testing.", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"firstName\" : \"firstName\", \"lastName\" : \"lastName\", \"password\" : \"password\", \"userStatus\" : 6, \"phone\" : \"phone\", \"id\" : 0, \"email\" : \"email\", \"username\" : \"username\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<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>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     */
+    @Operation(
+        summary = "Logs user into the system",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username/password supplied")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/login",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<String> loginUser(
+        @NotNull @Parameter(name = "username", description = "The user name for login", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @Parameter(name = "password", description = "The password for login in clear text", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Logs out current logged in user session",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/logout"
+    )
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param body Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Updated user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid user supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/user/{username}"
+    )
+    default ResponseEntity<Void> updateUser(
+        @Parameter(name = "username", description = "name that need to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(name = "body", description = "Updated user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User body
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApiController.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f6c4d9a2d6f0625dd27d17ef813d5deb6cf51ae
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class UserApiController implements UserApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public UserApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/configuration/HomeController.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/configuration/HomeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..34bae16b8986820eef90212adb88e86fa2db0ea8
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/configuration/HomeController.java
@@ -0,0 +1,53 @@
+package org.openapitools.configuration;
+
+import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.io.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StreamUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+
+/**
+ * Home redirection to OpenAPI api documentation
+ */
+@Controller
+public class HomeController {
+
+    private static YAMLMapper yamlMapper = new YAMLMapper();
+
+    @Value("classpath:/openapi.yaml")
+    private Resource openapi;
+
+    @Bean
+    public String openapiContent() throws IOException {
+        try(InputStream is = openapi.getInputStream()) {
+            return StreamUtils.copyToString(is, Charset.defaultCharset());
+        }
+    }
+
+    @GetMapping(value = "/openapi.yaml", produces = "application/vnd.oai.openapi")
+    @ResponseBody
+    public String openapiYaml() throws IOException {
+        return openapiContent();
+    }
+
+    @GetMapping(value = "/openapi.json", produces = "application/json")
+    @ResponseBody
+    public Object openapiJson() throws IOException {
+        return yamlMapper.readValue(openapiContent(), Object.class);
+    }
+
+    @RequestMapping("/")
+    public String index() {
+        return "redirect:swagger-ui/index.html?url=../openapi.json";
+    }
+
+
+}
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c57ae7dd14cea1acd9607d0e392dd2c79257878
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesAnyType
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesAnyType extends HashMap<String, Object>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesAnyType name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesAnyType additionalPropertiesAnyType = (AdditionalPropertiesAnyType) o;
+    return Objects.equals(this.name, additionalPropertiesAnyType.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesAnyType {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5285ec2f29bb31bba95fcaef6e06e815e1101b7
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
@@ -0,0 +1,87 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesArray
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesArray extends HashMap<String, List>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesArray name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesArray additionalPropertiesArray = (AdditionalPropertiesArray) o;
+    return Objects.equals(this.name, additionalPropertiesArray.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesArray {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8ca38c286d5ac22136574721e512776c68b780d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesBoolean
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesBoolean extends HashMap<String, Boolean>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesBoolean name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesBoolean additionalPropertiesBoolean = (AdditionalPropertiesBoolean) o;
+    return Objects.equals(this.name, additionalPropertiesBoolean.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesBoolean {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfd28ccb99637972f69d4653e63a17496210d34b
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
@@ -0,0 +1,414 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesClass   {
+  @JsonProperty("map_string")
+  @Valid
+  private Map<String, String> mapString = null;
+
+  @JsonProperty("map_number")
+  @Valid
+  private Map<String, BigDecimal> mapNumber = null;
+
+  @JsonProperty("map_integer")
+  @Valid
+  private Map<String, Integer> mapInteger = null;
+
+  @JsonProperty("map_boolean")
+  @Valid
+  private Map<String, Boolean> mapBoolean = null;
+
+  @JsonProperty("map_array_integer")
+  @Valid
+  private Map<String, List<Integer>> mapArrayInteger = null;
+
+  @JsonProperty("map_array_anytype")
+  @Valid
+  private Map<String, List<Object>> mapArrayAnytype = null;
+
+  @JsonProperty("map_map_string")
+  @Valid
+  private Map<String, Map<String, String>> mapMapString = null;
+
+  @JsonProperty("map_map_anytype")
+  @Valid
+  private Map<String, Map<String, Object>> mapMapAnytype = null;
+
+  @JsonProperty("anytype_1")
+  private Object anytype1;
+
+  @JsonProperty("anytype_2")
+  private Object anytype2;
+
+  @JsonProperty("anytype_3")
+  private Object anytype3;
+
+  public AdditionalPropertiesClass mapString(Map<String, String> mapString) {
+    this.mapString = mapString;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapStringItem(String key, String mapStringItem) {
+    if (this.mapString == null) {
+      this.mapString = new HashMap<>();
+    }
+    this.mapString.put(key, mapStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapString
+   * @return mapString
+  */
+  @Schema(name = "mapString", defaultValue = "")
+
+
+  public Map<String, String> getMapString() {
+    return mapString;
+  }
+
+  public void setMapString(Map<String, String> mapString) {
+    this.mapString = mapString;
+  }
+
+  public AdditionalPropertiesClass mapNumber(Map<String, BigDecimal> mapNumber) {
+    this.mapNumber = mapNumber;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapNumberItem(String key, BigDecimal mapNumberItem) {
+    if (this.mapNumber == null) {
+      this.mapNumber = new HashMap<>();
+    }
+    this.mapNumber.put(key, mapNumberItem);
+    return this;
+  }
+
+  /**
+   * Get mapNumber
+   * @return mapNumber
+  */
+  @Schema(name = "mapNumber", defaultValue = "")
+
+  @Valid
+
+  public Map<String, BigDecimal> getMapNumber() {
+    return mapNumber;
+  }
+
+  public void setMapNumber(Map<String, BigDecimal> mapNumber) {
+    this.mapNumber = mapNumber;
+  }
+
+  public AdditionalPropertiesClass mapInteger(Map<String, Integer> mapInteger) {
+    this.mapInteger = mapInteger;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapIntegerItem(String key, Integer mapIntegerItem) {
+    if (this.mapInteger == null) {
+      this.mapInteger = new HashMap<>();
+    }
+    this.mapInteger.put(key, mapIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get mapInteger
+   * @return mapInteger
+  */
+  @Schema(name = "mapInteger", defaultValue = "")
+
+
+  public Map<String, Integer> getMapInteger() {
+    return mapInteger;
+  }
+
+  public void setMapInteger(Map<String, Integer> mapInteger) {
+    this.mapInteger = mapInteger;
+  }
+
+  public AdditionalPropertiesClass mapBoolean(Map<String, Boolean> mapBoolean) {
+    this.mapBoolean = mapBoolean;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapBooleanItem(String key, Boolean mapBooleanItem) {
+    if (this.mapBoolean == null) {
+      this.mapBoolean = new HashMap<>();
+    }
+    this.mapBoolean.put(key, mapBooleanItem);
+    return this;
+  }
+
+  /**
+   * Get mapBoolean
+   * @return mapBoolean
+  */
+  @Schema(name = "mapBoolean", defaultValue = "")
+
+
+  public Map<String, Boolean> getMapBoolean() {
+    return mapBoolean;
+  }
+
+  public void setMapBoolean(Map<String, Boolean> mapBoolean) {
+    this.mapBoolean = mapBoolean;
+  }
+
+  public AdditionalPropertiesClass mapArrayInteger(Map<String, List<Integer>> mapArrayInteger) {
+    this.mapArrayInteger = mapArrayInteger;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapArrayIntegerItem(String key, List<Integer> mapArrayIntegerItem) {
+    if (this.mapArrayInteger == null) {
+      this.mapArrayInteger = new HashMap<>();
+    }
+    this.mapArrayInteger.put(key, mapArrayIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get mapArrayInteger
+   * @return mapArrayInteger
+  */
+  @Schema(name = "mapArrayInteger", defaultValue = "")
+
+  @Valid
+
+  public Map<String, List<Integer>> getMapArrayInteger() {
+    return mapArrayInteger;
+  }
+
+  public void setMapArrayInteger(Map<String, List<Integer>> mapArrayInteger) {
+    this.mapArrayInteger = mapArrayInteger;
+  }
+
+  public AdditionalPropertiesClass mapArrayAnytype(Map<String, List<Object>> mapArrayAnytype) {
+    this.mapArrayAnytype = mapArrayAnytype;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapArrayAnytypeItem(String key, List<Object> mapArrayAnytypeItem) {
+    if (this.mapArrayAnytype == null) {
+      this.mapArrayAnytype = new HashMap<>();
+    }
+    this.mapArrayAnytype.put(key, mapArrayAnytypeItem);
+    return this;
+  }
+
+  /**
+   * Get mapArrayAnytype
+   * @return mapArrayAnytype
+  */
+  @Schema(name = "mapArrayAnytype", defaultValue = "")
+
+  @Valid
+
+  public Map<String, List<Object>> getMapArrayAnytype() {
+    return mapArrayAnytype;
+  }
+
+  public void setMapArrayAnytype(Map<String, List<Object>> mapArrayAnytype) {
+    this.mapArrayAnytype = mapArrayAnytype;
+  }
+
+  public AdditionalPropertiesClass mapMapString(Map<String, Map<String, String>> mapMapString) {
+    this.mapMapString = mapMapString;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapMapStringItem(String key, Map<String, String> mapMapStringItem) {
+    if (this.mapMapString == null) {
+      this.mapMapString = new HashMap<>();
+    }
+    this.mapMapString.put(key, mapMapStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapString
+   * @return mapMapString
+  */
+  @Schema(name = "mapMapString", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, String>> getMapMapString() {
+    return mapMapString;
+  }
+
+  public void setMapMapString(Map<String, Map<String, String>> mapMapString) {
+    this.mapMapString = mapMapString;
+  }
+
+  public AdditionalPropertiesClass mapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
+    this.mapMapAnytype = mapMapAnytype;
+    return this;
+  }
+
+  public AdditionalPropertiesClass putMapMapAnytypeItem(String key, Map<String, Object> mapMapAnytypeItem) {
+    if (this.mapMapAnytype == null) {
+      this.mapMapAnytype = new HashMap<>();
+    }
+    this.mapMapAnytype.put(key, mapMapAnytypeItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapAnytype
+   * @return mapMapAnytype
+  */
+  @Schema(name = "mapMapAnytype", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, Object>> getMapMapAnytype() {
+    return mapMapAnytype;
+  }
+
+  public void setMapMapAnytype(Map<String, Map<String, Object>> mapMapAnytype) {
+    this.mapMapAnytype = mapMapAnytype;
+  }
+
+  public AdditionalPropertiesClass anytype1(Object anytype1) {
+    this.anytype1 = anytype1;
+    return this;
+  }
+
+  /**
+   * Get anytype1
+   * @return anytype1
+  */
+  @Schema(name = "anytype1", defaultValue = "")
+
+
+  public Object getAnytype1() {
+    return anytype1;
+  }
+
+  public void setAnytype1(Object anytype1) {
+    this.anytype1 = anytype1;
+  }
+
+  public AdditionalPropertiesClass anytype2(Object anytype2) {
+    this.anytype2 = anytype2;
+    return this;
+  }
+
+  /**
+   * Get anytype2
+   * @return anytype2
+  */
+  @Schema(name = "anytype2", defaultValue = "")
+
+
+  public Object getAnytype2() {
+    return anytype2;
+  }
+
+  public void setAnytype2(Object anytype2) {
+    this.anytype2 = anytype2;
+  }
+
+  public AdditionalPropertiesClass anytype3(Object anytype3) {
+    this.anytype3 = anytype3;
+    return this;
+  }
+
+  /**
+   * Get anytype3
+   * @return anytype3
+  */
+  @Schema(name = "anytype3", defaultValue = "")
+
+
+  public Object getAnytype3() {
+    return anytype3;
+  }
+
+  public void setAnytype3(Object anytype3) {
+    this.anytype3 = anytype3;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesClass additionalPropertiesClass = (AdditionalPropertiesClass) o;
+    return Objects.equals(this.mapString, additionalPropertiesClass.mapString) &&
+        Objects.equals(this.mapNumber, additionalPropertiesClass.mapNumber) &&
+        Objects.equals(this.mapInteger, additionalPropertiesClass.mapInteger) &&
+        Objects.equals(this.mapBoolean, additionalPropertiesClass.mapBoolean) &&
+        Objects.equals(this.mapArrayInteger, additionalPropertiesClass.mapArrayInteger) &&
+        Objects.equals(this.mapArrayAnytype, additionalPropertiesClass.mapArrayAnytype) &&
+        Objects.equals(this.mapMapString, additionalPropertiesClass.mapMapString) &&
+        Objects.equals(this.mapMapAnytype, additionalPropertiesClass.mapMapAnytype) &&
+        Objects.equals(this.anytype1, additionalPropertiesClass.anytype1) &&
+        Objects.equals(this.anytype2, additionalPropertiesClass.anytype2) &&
+        Objects.equals(this.anytype3, additionalPropertiesClass.anytype3);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(mapString, mapNumber, mapInteger, mapBoolean, mapArrayInteger, mapArrayAnytype, mapMapString, mapMapAnytype, anytype1, anytype2, anytype3);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesClass {\n");
+    
+    sb.append("    mapString: ").append(toIndentedString(mapString)).append("\n");
+    sb.append("    mapNumber: ").append(toIndentedString(mapNumber)).append("\n");
+    sb.append("    mapInteger: ").append(toIndentedString(mapInteger)).append("\n");
+    sb.append("    mapBoolean: ").append(toIndentedString(mapBoolean)).append("\n");
+    sb.append("    mapArrayInteger: ").append(toIndentedString(mapArrayInteger)).append("\n");
+    sb.append("    mapArrayAnytype: ").append(toIndentedString(mapArrayAnytype)).append("\n");
+    sb.append("    mapMapString: ").append(toIndentedString(mapMapString)).append("\n");
+    sb.append("    mapMapAnytype: ").append(toIndentedString(mapMapAnytype)).append("\n");
+    sb.append("    anytype1: ").append(toIndentedString(anytype1)).append("\n");
+    sb.append("    anytype2: ").append(toIndentedString(anytype2)).append("\n");
+    sb.append("    anytype3: ").append(toIndentedString(anytype3)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fea577ab44bc610a5b2f663c9424ca16e773b02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesInteger
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesInteger extends HashMap<String, Integer>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesInteger name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesInteger additionalPropertiesInteger = (AdditionalPropertiesInteger) o;
+    return Objects.equals(this.name, additionalPropertiesInteger.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesInteger {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6eee612a24fecb0da4e4e2cddb8c7d68ef42534
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
@@ -0,0 +1,87 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesNumber
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesNumber extends HashMap<String, BigDecimal>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesNumber name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesNumber additionalPropertiesNumber = (AdditionalPropertiesNumber) o;
+    return Objects.equals(this.name, additionalPropertiesNumber.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesNumber {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7116bd7572cef9114d1110e4f546295b5fb9b25
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesObject
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesObject extends HashMap<String, Map>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesObject name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesObject additionalPropertiesObject = (AdditionalPropertiesObject) o;
+    return Objects.equals(this.name, additionalPropertiesObject.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesObject {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesString.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2022be266fbf1947c18de4430af4faa605595f3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.HashMap;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * AdditionalPropertiesString
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesString extends HashMap<String, String>  {
+  @JsonProperty("name")
+  private String name;
+
+  public AdditionalPropertiesString name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AdditionalPropertiesString additionalPropertiesString = (AdditionalPropertiesString) o;
+    return Objects.equals(this.name, additionalPropertiesString.name) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AdditionalPropertiesString {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Animal.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Animal.java
new file mode 100644
index 0000000000000000000000000000000000000000..6f096d5069edf4f60558ff11cd2b2f1902eda228
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Animal.java
@@ -0,0 +1,118 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Animal
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "className", visible = true)
+@JsonSubTypes({
+  @JsonSubTypes.Type(value = BigCat.class, name = "BigCat"),
+  @JsonSubTypes.Type(value = Cat.class, name = "Cat"),
+  @JsonSubTypes.Type(value = Dog.class, name = "Dog"),
+})
+
+public class Animal   {
+  @JsonProperty("className")
+  private String className;
+
+  @JsonProperty("color")
+  private String color = "red";
+
+  public Animal className(String className) {
+    this.className = className;
+    return this;
+  }
+
+  /**
+   * Get className
+   * @return className
+  */
+  @Schema(name = "className", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getClassName() {
+    return className;
+  }
+
+  public void setClassName(String className) {
+    this.className = className;
+  }
+
+  public Animal color(String color) {
+    this.color = color;
+    return this;
+  }
+
+  /**
+   * Get color
+   * @return color
+  */
+  @Schema(name = "color", defaultValue = "")
+
+
+  public String getColor() {
+    return color;
+  }
+
+  public void setColor(String color) {
+    this.color = color;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Animal animal = (Animal) o;
+    return Objects.equals(this.className, animal.className) &&
+        Objects.equals(this.color, animal.color);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(className, color);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Animal {\n");
+    
+    sb.append("    className: ").append(toIndentedString(className)).append("\n");
+    sb.append("    color: ").append(toIndentedString(color)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebe36ad761a9c112d97adf5f724aea0cfd556975
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
@@ -0,0 +1,96 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayOfArrayOfNumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfArrayOfNumberOnly   {
+  @JsonProperty("ArrayArrayNumber")
+  @Valid
+  private List<List<BigDecimal>> arrayArrayNumber = null;
+
+  public ArrayOfArrayOfNumberOnly arrayArrayNumber(List<List<BigDecimal>> arrayArrayNumber) {
+    this.arrayArrayNumber = arrayArrayNumber;
+    return this;
+  }
+
+  public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List<BigDecimal> arrayArrayNumberItem) {
+    if (this.arrayArrayNumber == null) {
+      this.arrayArrayNumber = new ArrayList<>();
+    }
+    this.arrayArrayNumber.add(arrayArrayNumberItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayNumber
+   * @return arrayArrayNumber
+  */
+  @Schema(name = "arrayArrayNumber", defaultValue = "")
+
+  @Valid
+
+  public List<List<BigDecimal>> getArrayArrayNumber() {
+    return arrayArrayNumber;
+  }
+
+  public void setArrayArrayNumber(List<List<BigDecimal>> arrayArrayNumber) {
+    this.arrayArrayNumber = arrayArrayNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayOfArrayOfNumberOnly arrayOfArrayOfNumberOnly = (ArrayOfArrayOfNumberOnly) o;
+    return Objects.equals(this.arrayArrayNumber, arrayOfArrayOfNumberOnly.arrayArrayNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayArrayNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayOfArrayOfNumberOnly {\n");
+    
+    sb.append("    arrayArrayNumber: ").append(toIndentedString(arrayArrayNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..8158dd44ab88aaf69dd18b4c136ff094d8e33b02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
@@ -0,0 +1,96 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayOfNumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfNumberOnly   {
+  @JsonProperty("ArrayNumber")
+  @Valid
+  private List<BigDecimal> arrayNumber = null;
+
+  public ArrayOfNumberOnly arrayNumber(List<BigDecimal> arrayNumber) {
+    this.arrayNumber = arrayNumber;
+    return this;
+  }
+
+  public ArrayOfNumberOnly addArrayNumberItem(BigDecimal arrayNumberItem) {
+    if (this.arrayNumber == null) {
+      this.arrayNumber = new ArrayList<>();
+    }
+    this.arrayNumber.add(arrayNumberItem);
+    return this;
+  }
+
+  /**
+   * Get arrayNumber
+   * @return arrayNumber
+  */
+  @Schema(name = "arrayNumber", defaultValue = "")
+
+  @Valid
+
+  public List<BigDecimal> getArrayNumber() {
+    return arrayNumber;
+  }
+
+  public void setArrayNumber(List<BigDecimal> arrayNumber) {
+    this.arrayNumber = arrayNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayOfNumberOnly arrayOfNumberOnly = (ArrayOfNumberOnly) o;
+    return Objects.equals(this.arrayNumber, arrayOfNumberOnly.arrayNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayOfNumberOnly {\n");
+    
+    sb.append("    arrayNumber: ").append(toIndentedString(arrayNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ArrayTest.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ArrayTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..420010561bcde88cb30eda512eb9fb4ca45779ac
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ArrayTest.java
@@ -0,0 +1,165 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.model.ReadOnlyFirst;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ArrayTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayTest   {
+  @JsonProperty("array_of_string")
+  @Valid
+  private List<String> arrayOfString = null;
+
+  @JsonProperty("array_array_of_integer")
+  @Valid
+  private List<List<Long>> arrayArrayOfInteger = null;
+
+  @JsonProperty("array_array_of_model")
+  @Valid
+  private List<List<ReadOnlyFirst>> arrayArrayOfModel = null;
+
+  public ArrayTest arrayOfString(List<String> arrayOfString) {
+    this.arrayOfString = arrayOfString;
+    return this;
+  }
+
+  public ArrayTest addArrayOfStringItem(String arrayOfStringItem) {
+    if (this.arrayOfString == null) {
+      this.arrayOfString = new ArrayList<>();
+    }
+    this.arrayOfString.add(arrayOfStringItem);
+    return this;
+  }
+
+  /**
+   * Get arrayOfString
+   * @return arrayOfString
+  */
+  @Schema(name = "arrayOfString", defaultValue = "")
+
+
+  public List<String> getArrayOfString() {
+    return arrayOfString;
+  }
+
+  public void setArrayOfString(List<String> arrayOfString) {
+    this.arrayOfString = arrayOfString;
+  }
+
+  public ArrayTest arrayArrayOfInteger(List<List<Long>> arrayArrayOfInteger) {
+    this.arrayArrayOfInteger = arrayArrayOfInteger;
+    return this;
+  }
+
+  public ArrayTest addArrayArrayOfIntegerItem(List<Long> arrayArrayOfIntegerItem) {
+    if (this.arrayArrayOfInteger == null) {
+      this.arrayArrayOfInteger = new ArrayList<>();
+    }
+    this.arrayArrayOfInteger.add(arrayArrayOfIntegerItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayOfInteger
+   * @return arrayArrayOfInteger
+  */
+  @Schema(name = "arrayArrayOfInteger", defaultValue = "")
+
+  @Valid
+
+  public List<List<Long>> getArrayArrayOfInteger() {
+    return arrayArrayOfInteger;
+  }
+
+  public void setArrayArrayOfInteger(List<List<Long>> arrayArrayOfInteger) {
+    this.arrayArrayOfInteger = arrayArrayOfInteger;
+  }
+
+  public ArrayTest arrayArrayOfModel(List<List<ReadOnlyFirst>> arrayArrayOfModel) {
+    this.arrayArrayOfModel = arrayArrayOfModel;
+    return this;
+  }
+
+  public ArrayTest addArrayArrayOfModelItem(List<ReadOnlyFirst> arrayArrayOfModelItem) {
+    if (this.arrayArrayOfModel == null) {
+      this.arrayArrayOfModel = new ArrayList<>();
+    }
+    this.arrayArrayOfModel.add(arrayArrayOfModelItem);
+    return this;
+  }
+
+  /**
+   * Get arrayArrayOfModel
+   * @return arrayArrayOfModel
+  */
+  @Schema(name = "arrayArrayOfModel", defaultValue = "")
+
+  @Valid
+
+  public List<List<ReadOnlyFirst>> getArrayArrayOfModel() {
+    return arrayArrayOfModel;
+  }
+
+  public void setArrayArrayOfModel(List<List<ReadOnlyFirst>> arrayArrayOfModel) {
+    this.arrayArrayOfModel = arrayArrayOfModel;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ArrayTest arrayTest = (ArrayTest) o;
+    return Objects.equals(this.arrayOfString, arrayTest.arrayOfString) &&
+        Objects.equals(this.arrayArrayOfInteger, arrayTest.arrayArrayOfInteger) &&
+        Objects.equals(this.arrayArrayOfModel, arrayTest.arrayArrayOfModel);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(arrayOfString, arrayArrayOfInteger, arrayArrayOfModel);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ArrayTest {\n");
+    
+    sb.append("    arrayOfString: ").append(toIndentedString(arrayOfString)).append("\n");
+    sb.append("    arrayArrayOfInteger: ").append(toIndentedString(arrayArrayOfInteger)).append("\n");
+    sb.append("    arrayArrayOfModel: ").append(toIndentedString(arrayArrayOfModel)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/BigCat.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/BigCat.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f4a080ad8d207649ed357bd5b170142b921935f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/BigCat.java
@@ -0,0 +1,126 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.BigCatAllOf;
+import org.openapitools.model.Cat;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * BigCat
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class BigCat extends Cat  {
+  /**
+   * Gets or Sets kind
+   */
+  public enum KindEnum {
+    LIONS("lions"),
+    
+    TIGERS("tigers"),
+    
+    LEOPARDS("leopards"),
+    
+    JAGUARS("jaguars");
+
+    private String value;
+
+    KindEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static KindEnum fromValue(String value) {
+      for (KindEnum b : KindEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("kind")
+  private KindEnum kind;
+
+  public BigCat kind(KindEnum kind) {
+    this.kind = kind;
+    return this;
+  }
+
+  /**
+   * Get kind
+   * @return kind
+  */
+  @Schema(name = "kind", defaultValue = "")
+
+
+  public KindEnum getKind() {
+    return kind;
+  }
+
+  public void setKind(KindEnum kind) {
+    this.kind = kind;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BigCat bigCat = (BigCat) o;
+    return Objects.equals(this.kind, bigCat.kind) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(kind, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BigCat {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    kind: ").append(toIndentedString(kind)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/BigCatAllOf.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/BigCatAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..d0a47ab5127c66f1da66cb709a5a94d3ddf03bfe
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/BigCatAllOf.java
@@ -0,0 +1,123 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * BigCatAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class BigCatAllOf   {
+  /**
+   * Gets or Sets kind
+   */
+  public enum KindEnum {
+    LIONS("lions"),
+    
+    TIGERS("tigers"),
+    
+    LEOPARDS("leopards"),
+    
+    JAGUARS("jaguars");
+
+    private String value;
+
+    KindEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static KindEnum fromValue(String value) {
+      for (KindEnum b : KindEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("kind")
+  private KindEnum kind;
+
+  public BigCatAllOf kind(KindEnum kind) {
+    this.kind = kind;
+    return this;
+  }
+
+  /**
+   * Get kind
+   * @return kind
+  */
+  @Schema(name = "kind", defaultValue = "")
+
+
+  public KindEnum getKind() {
+    return kind;
+  }
+
+  public void setKind(KindEnum kind) {
+    this.kind = kind;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BigCatAllOf bigCatAllOf = (BigCatAllOf) o;
+    return Objects.equals(this.kind, bigCatAllOf.kind);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(kind);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BigCatAllOf {\n");
+    
+    sb.append("    kind: ").append(toIndentedString(kind)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Capitalization.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Capitalization.java
new file mode 100644
index 0000000000000000000000000000000000000000..92d9a7245f168d96d975f14ce65aac2276c59f73
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Capitalization.java
@@ -0,0 +1,208 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Capitalization
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Capitalization   {
+  @JsonProperty("smallCamel")
+  private String smallCamel;
+
+  @JsonProperty("CapitalCamel")
+  private String capitalCamel;
+
+  @JsonProperty("small_Snake")
+  private String smallSnake;
+
+  @JsonProperty("Capital_Snake")
+  private String capitalSnake;
+
+  @JsonProperty("SCA_ETH_Flow_Points")
+  private String scAETHFlowPoints;
+
+  @JsonProperty("ATT_NAME")
+  private String ATT_NAME;
+
+  public Capitalization smallCamel(String smallCamel) {
+    this.smallCamel = smallCamel;
+    return this;
+  }
+
+  /**
+   * Get smallCamel
+   * @return smallCamel
+  */
+  @Schema(name = "smallCamel", defaultValue = "")
+
+
+  public String getSmallCamel() {
+    return smallCamel;
+  }
+
+  public void setSmallCamel(String smallCamel) {
+    this.smallCamel = smallCamel;
+  }
+
+  public Capitalization capitalCamel(String capitalCamel) {
+    this.capitalCamel = capitalCamel;
+    return this;
+  }
+
+  /**
+   * Get capitalCamel
+   * @return capitalCamel
+  */
+  @Schema(name = "capitalCamel", defaultValue = "")
+
+
+  public String getCapitalCamel() {
+    return capitalCamel;
+  }
+
+  public void setCapitalCamel(String capitalCamel) {
+    this.capitalCamel = capitalCamel;
+  }
+
+  public Capitalization smallSnake(String smallSnake) {
+    this.smallSnake = smallSnake;
+    return this;
+  }
+
+  /**
+   * Get smallSnake
+   * @return smallSnake
+  */
+  @Schema(name = "smallSnake", defaultValue = "")
+
+
+  public String getSmallSnake() {
+    return smallSnake;
+  }
+
+  public void setSmallSnake(String smallSnake) {
+    this.smallSnake = smallSnake;
+  }
+
+  public Capitalization capitalSnake(String capitalSnake) {
+    this.capitalSnake = capitalSnake;
+    return this;
+  }
+
+  /**
+   * Get capitalSnake
+   * @return capitalSnake
+  */
+  @Schema(name = "capitalSnake", defaultValue = "")
+
+
+  public String getCapitalSnake() {
+    return capitalSnake;
+  }
+
+  public void setCapitalSnake(String capitalSnake) {
+    this.capitalSnake = capitalSnake;
+  }
+
+  public Capitalization scAETHFlowPoints(String scAETHFlowPoints) {
+    this.scAETHFlowPoints = scAETHFlowPoints;
+    return this;
+  }
+
+  /**
+   * Get scAETHFlowPoints
+   * @return scAETHFlowPoints
+  */
+  @Schema(name = "scAETHFlowPoints", defaultValue = "")
+
+
+  public String getScAETHFlowPoints() {
+    return scAETHFlowPoints;
+  }
+
+  public void setScAETHFlowPoints(String scAETHFlowPoints) {
+    this.scAETHFlowPoints = scAETHFlowPoints;
+  }
+
+  public Capitalization ATT_NAME(String ATT_NAME) {
+    this.ATT_NAME = ATT_NAME;
+    return this;
+  }
+
+  /**
+   * Name of the pet 
+   * @return ATT_NAME
+  */
+  @Schema(name = "ATT_NAME", defaultValue = "Name of the pet ")
+
+
+  public String getATTNAME() {
+    return ATT_NAME;
+  }
+
+  public void setATTNAME(String ATT_NAME) {
+    this.ATT_NAME = ATT_NAME;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Capitalization capitalization = (Capitalization) o;
+    return Objects.equals(this.smallCamel, capitalization.smallCamel) &&
+        Objects.equals(this.capitalCamel, capitalization.capitalCamel) &&
+        Objects.equals(this.smallSnake, capitalization.smallSnake) &&
+        Objects.equals(this.capitalSnake, capitalization.capitalSnake) &&
+        Objects.equals(this.scAETHFlowPoints, capitalization.scAETHFlowPoints) &&
+        Objects.equals(this.ATT_NAME, capitalization.ATT_NAME);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(smallCamel, capitalCamel, smallSnake, capitalSnake, scAETHFlowPoints, ATT_NAME);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Capitalization {\n");
+    
+    sb.append("    smallCamel: ").append(toIndentedString(smallCamel)).append("\n");
+    sb.append("    capitalCamel: ").append(toIndentedString(capitalCamel)).append("\n");
+    sb.append("    smallSnake: ").append(toIndentedString(smallSnake)).append("\n");
+    sb.append("    capitalSnake: ").append(toIndentedString(capitalSnake)).append("\n");
+    sb.append("    scAETHFlowPoints: ").append(toIndentedString(scAETHFlowPoints)).append("\n");
+    sb.append("    ATT_NAME: ").append(toIndentedString(ATT_NAME)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Cat.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Cat.java
new file mode 100644
index 0000000000000000000000000000000000000000..2e496fb4accd023274cd8876f918d9bc81830216
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Cat.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.model.Animal;
+import org.openapitools.model.CatAllOf;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Cat
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Cat extends Animal  {
+  @JsonProperty("declawed")
+  private Boolean declawed;
+
+  public Cat declawed(Boolean declawed) {
+    this.declawed = declawed;
+    return this;
+  }
+
+  /**
+   * Get declawed
+   * @return declawed
+  */
+  @Schema(name = "declawed", defaultValue = "")
+
+
+  public Boolean getDeclawed() {
+    return declawed;
+  }
+
+  public void setDeclawed(Boolean declawed) {
+    this.declawed = declawed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Cat cat = (Cat) o;
+    return Objects.equals(this.declawed, cat.declawed) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(declawed, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Cat {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    declawed: ").append(toIndentedString(declawed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/CatAllOf.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/CatAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..b732a62b1bc3c125f93944e64bd0e7ddcee8b596
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/CatAllOf.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * CatAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class CatAllOf   {
+  @JsonProperty("declawed")
+  private Boolean declawed;
+
+  public CatAllOf declawed(Boolean declawed) {
+    this.declawed = declawed;
+    return this;
+  }
+
+  /**
+   * Get declawed
+   * @return declawed
+  */
+  @Schema(name = "declawed", defaultValue = "")
+
+
+  public Boolean getDeclawed() {
+    return declawed;
+  }
+
+  public void setDeclawed(Boolean declawed) {
+    this.declawed = declawed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CatAllOf catAllOf = (CatAllOf) o;
+    return Objects.equals(this.declawed, catAllOf.declawed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(declawed);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CatAllOf {\n");
+    
+    sb.append("    declawed: ").append(toIndentedString(declawed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Category.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Category.java
new file mode 100644
index 0000000000000000000000000000000000000000..038fc8df3afd7211ee72d0f74168dbf1423bfb14
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Category.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Category
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Category   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name = "default-name";
+
+  public Category id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Category name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Category category = (Category) o;
+    return Objects.equals(this.id, category.id) &&
+        Objects.equals(this.name, category.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Category {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ClassModel.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ClassModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa2a736f4fb527cad6a7a173117b0a211b4e5923
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ClassModel.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model with \&quot;_class\&quot; property
+ */
+@Schema(name = "ClassModel",description = "Model for testing model with \"_class\" property")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ClassModel   {
+  @JsonProperty("_class")
+  private String propertyClass;
+
+  public ClassModel propertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+    return this;
+  }
+
+  /**
+   * Get propertyClass
+   * @return propertyClass
+  */
+  @Schema(name = "propertyClass", defaultValue = "")
+
+
+  public String getPropertyClass() {
+    return propertyClass;
+  }
+
+  public void setPropertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ClassModel classModel = (ClassModel) o;
+    return Objects.equals(this.propertyClass, classModel.propertyClass);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(propertyClass);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ClassModel {\n");
+    
+    sb.append("    propertyClass: ").append(toIndentedString(propertyClass)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Client.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..e11bd4ff1b13d8e49d80ca56033f92f6b92d4a7f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Client.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Client
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Client   {
+  @JsonProperty("client")
+  private String client;
+
+  public Client client(String client) {
+    this.client = client;
+    return this;
+  }
+
+  /**
+   * Get client
+   * @return client
+  */
+  @Schema(name = "client", defaultValue = "")
+
+
+  public String getClient() {
+    return client;
+  }
+
+  public void setClient(String client) {
+    this.client = client;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Client client = (Client) o;
+    return Objects.equals(this.client, client.client);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(client);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Client {\n");
+    
+    sb.append("    client: ").append(toIndentedString(client)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Dog.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Dog.java
new file mode 100644
index 0000000000000000000000000000000000000000..ed5dc71a4ba24b421e4506efab00505af4d47fad
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Dog.java
@@ -0,0 +1,86 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.model.Animal;
+import org.openapitools.model.DogAllOf;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Dog
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Dog extends Animal  {
+  @JsonProperty("breed")
+  private String breed;
+
+  public Dog breed(String breed) {
+    this.breed = breed;
+    return this;
+  }
+
+  /**
+   * Get breed
+   * @return breed
+  */
+  @Schema(name = "breed", defaultValue = "")
+
+
+  public String getBreed() {
+    return breed;
+  }
+
+  public void setBreed(String breed) {
+    this.breed = breed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Dog dog = (Dog) o;
+    return Objects.equals(this.breed, dog.breed) &&
+        super.equals(o);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(breed, super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Dog {\n");
+    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
+    sb.append("    breed: ").append(toIndentedString(breed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/DogAllOf.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/DogAllOf.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c99bc376c3478a650e5f776f10c07b1921f7dd1
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/DogAllOf.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * DogAllOf
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class DogAllOf   {
+  @JsonProperty("breed")
+  private String breed;
+
+  public DogAllOf breed(String breed) {
+    this.breed = breed;
+    return this;
+  }
+
+  /**
+   * Get breed
+   * @return breed
+  */
+  @Schema(name = "breed", defaultValue = "")
+
+
+  public String getBreed() {
+    return breed;
+  }
+
+  public void setBreed(String breed) {
+    this.breed = breed;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    DogAllOf dogAllOf = (DogAllOf) o;
+    return Objects.equals(this.breed, dogAllOf.breed);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(breed);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class DogAllOf {\n");
+    
+    sb.append("    breed: ").append(toIndentedString(breed)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/EnumArrays.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/EnumArrays.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1b2df0716a2aa0e29529f3c8b7c884739cb591c
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/EnumArrays.java
@@ -0,0 +1,190 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * EnumArrays
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class EnumArrays   {
+  /**
+   * Gets or Sets justSymbol
+   */
+  public enum JustSymbolEnum {
+    GREATER_THAN_OR_EQUAL_TO(">="),
+    
+    DOLLAR("$");
+
+    private String value;
+
+    JustSymbolEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static JustSymbolEnum fromValue(String value) {
+      for (JustSymbolEnum b : JustSymbolEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("just_symbol")
+  private JustSymbolEnum justSymbol;
+
+  /**
+   * Gets or Sets arrayEnum
+   */
+  public enum ArrayEnumEnum {
+    FISH("fish"),
+    
+    CRAB("crab");
+
+    private String value;
+
+    ArrayEnumEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static ArrayEnumEnum fromValue(String value) {
+      for (ArrayEnumEnum b : ArrayEnumEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("array_enum")
+  @Valid
+  private List<ArrayEnumEnum> arrayEnum = null;
+
+  public EnumArrays justSymbol(JustSymbolEnum justSymbol) {
+    this.justSymbol = justSymbol;
+    return this;
+  }
+
+  /**
+   * Get justSymbol
+   * @return justSymbol
+  */
+  @Schema(name = "justSymbol", defaultValue = "")
+
+
+  public JustSymbolEnum getJustSymbol() {
+    return justSymbol;
+  }
+
+  public void setJustSymbol(JustSymbolEnum justSymbol) {
+    this.justSymbol = justSymbol;
+  }
+
+  public EnumArrays arrayEnum(List<ArrayEnumEnum> arrayEnum) {
+    this.arrayEnum = arrayEnum;
+    return this;
+  }
+
+  public EnumArrays addArrayEnumItem(ArrayEnumEnum arrayEnumItem) {
+    if (this.arrayEnum == null) {
+      this.arrayEnum = new ArrayList<>();
+    }
+    this.arrayEnum.add(arrayEnumItem);
+    return this;
+  }
+
+  /**
+   * Get arrayEnum
+   * @return arrayEnum
+  */
+  @Schema(name = "arrayEnum", defaultValue = "")
+
+
+  public List<ArrayEnumEnum> getArrayEnum() {
+    return arrayEnum;
+  }
+
+  public void setArrayEnum(List<ArrayEnumEnum> arrayEnum) {
+    this.arrayEnum = arrayEnum;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    EnumArrays enumArrays = (EnumArrays) o;
+    return Objects.equals(this.justSymbol, enumArrays.justSymbol) &&
+        Objects.equals(this.arrayEnum, enumArrays.arrayEnum);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(justSymbol, arrayEnum);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class EnumArrays {\n");
+    
+    sb.append("    justSymbol: ").append(toIndentedString(justSymbol)).append("\n");
+    sb.append("    arrayEnum: ").append(toIndentedString(arrayEnum)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/EnumClass.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/EnumClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3d30c1ad453729c1e301ec513b2ad9bb8a3f600
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/EnumClass.java
@@ -0,0 +1,55 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets EnumClass
+ */
+public enum EnumClass {
+  
+  _ABC("_abc"),
+  
+  _EFG("-efg"),
+  
+  _XYZ_("(xyz)");
+
+  private String value;
+
+  EnumClass(String value) {
+    this.value = value;
+  }
+
+  @JsonValue
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(value);
+  }
+
+  @JsonCreator
+  public static EnumClass fromValue(String value) {
+    for (EnumClass b : EnumClass.values()) {
+      if (b.value.equals(value)) {
+        return b;
+      }
+    }
+    throw new IllegalArgumentException("Unexpected value '" + value + "'");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/EnumTest.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/EnumTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..938af53e2b816bd12614e5cfa329b6a5c9737b4a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/EnumTest.java
@@ -0,0 +1,331 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.OuterEnum;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * EnumTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class EnumTest   {
+  /**
+   * Gets or Sets enumString
+   */
+  public enum EnumStringEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower"),
+    
+    EMPTY("");
+
+    private String value;
+
+    EnumStringEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumStringEnum fromValue(String value) {
+      for (EnumStringEnum b : EnumStringEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_string")
+  private EnumStringEnum enumString;
+
+  /**
+   * Gets or Sets enumStringRequired
+   */
+  public enum EnumStringRequiredEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower"),
+    
+    EMPTY("");
+
+    private String value;
+
+    EnumStringRequiredEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumStringRequiredEnum fromValue(String value) {
+      for (EnumStringRequiredEnum b : EnumStringRequiredEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_string_required")
+  private EnumStringRequiredEnum enumStringRequired;
+
+  /**
+   * Gets or Sets enumInteger
+   */
+  public enum EnumIntegerEnum {
+    NUMBER_1(1),
+    
+    NUMBER_MINUS_1(-1);
+
+    private Integer value;
+
+    EnumIntegerEnum(Integer value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public Integer getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumIntegerEnum fromValue(Integer value) {
+      for (EnumIntegerEnum b : EnumIntegerEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_integer")
+  private EnumIntegerEnum enumInteger;
+
+  /**
+   * Gets or Sets enumNumber
+   */
+  public enum EnumNumberEnum {
+    NUMBER_1_DOT_1(1.1),
+    
+    NUMBER_MINUS_1_DOT_2(-1.2);
+
+    private Double value;
+
+    EnumNumberEnum(Double value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public Double getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EnumNumberEnum fromValue(Double value) {
+      for (EnumNumberEnum b : EnumNumberEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("enum_number")
+  private EnumNumberEnum enumNumber;
+
+  @JsonProperty("outerEnum")
+  private OuterEnum outerEnum;
+
+  public EnumTest enumString(EnumStringEnum enumString) {
+    this.enumString = enumString;
+    return this;
+  }
+
+  /**
+   * Get enumString
+   * @return enumString
+  */
+  @Schema(name = "enumString", defaultValue = "")
+
+
+  public EnumStringEnum getEnumString() {
+    return enumString;
+  }
+
+  public void setEnumString(EnumStringEnum enumString) {
+    this.enumString = enumString;
+  }
+
+  public EnumTest enumStringRequired(EnumStringRequiredEnum enumStringRequired) {
+    this.enumStringRequired = enumStringRequired;
+    return this;
+  }
+
+  /**
+   * Get enumStringRequired
+   * @return enumStringRequired
+  */
+  @Schema(name = "enumStringRequired", required = true, defaultValue = "")
+  @NotNull
+
+
+  public EnumStringRequiredEnum getEnumStringRequired() {
+    return enumStringRequired;
+  }
+
+  public void setEnumStringRequired(EnumStringRequiredEnum enumStringRequired) {
+    this.enumStringRequired = enumStringRequired;
+  }
+
+  public EnumTest enumInteger(EnumIntegerEnum enumInteger) {
+    this.enumInteger = enumInteger;
+    return this;
+  }
+
+  /**
+   * Get enumInteger
+   * @return enumInteger
+  */
+  @Schema(name = "enumInteger", defaultValue = "")
+
+
+  public EnumIntegerEnum getEnumInteger() {
+    return enumInteger;
+  }
+
+  public void setEnumInteger(EnumIntegerEnum enumInteger) {
+    this.enumInteger = enumInteger;
+  }
+
+  public EnumTest enumNumber(EnumNumberEnum enumNumber) {
+    this.enumNumber = enumNumber;
+    return this;
+  }
+
+  /**
+   * Get enumNumber
+   * @return enumNumber
+  */
+  @Schema(name = "enumNumber", defaultValue = "")
+
+
+  public EnumNumberEnum getEnumNumber() {
+    return enumNumber;
+  }
+
+  public void setEnumNumber(EnumNumberEnum enumNumber) {
+    this.enumNumber = enumNumber;
+  }
+
+  public EnumTest outerEnum(OuterEnum outerEnum) {
+    this.outerEnum = outerEnum;
+    return this;
+  }
+
+  /**
+   * Get outerEnum
+   * @return outerEnum
+  */
+  @Schema(name = "outerEnum", defaultValue = "")
+
+  @Valid
+
+  public OuterEnum getOuterEnum() {
+    return outerEnum;
+  }
+
+  public void setOuterEnum(OuterEnum outerEnum) {
+    this.outerEnum = outerEnum;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    EnumTest enumTest = (EnumTest) o;
+    return Objects.equals(this.enumString, enumTest.enumString) &&
+        Objects.equals(this.enumStringRequired, enumTest.enumStringRequired) &&
+        Objects.equals(this.enumInteger, enumTest.enumInteger) &&
+        Objects.equals(this.enumNumber, enumTest.enumNumber) &&
+        Objects.equals(this.outerEnum, enumTest.outerEnum);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(enumString, enumStringRequired, enumInteger, enumNumber, outerEnum);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class EnumTest {\n");
+    
+    sb.append("    enumString: ").append(toIndentedString(enumString)).append("\n");
+    sb.append("    enumStringRequired: ").append(toIndentedString(enumStringRequired)).append("\n");
+    sb.append("    enumInteger: ").append(toIndentedString(enumInteger)).append("\n");
+    sb.append("    enumNumber: ").append(toIndentedString(enumNumber)).append("\n");
+    sb.append("    outerEnum: ").append(toIndentedString(outerEnum)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FileSchemaTestClass.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FileSchemaTestClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d1e9ca8495cde97f9cc2a350fbe63c78738934b
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FileSchemaTestClass.java
@@ -0,0 +1,121 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * FileSchemaTestClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FileSchemaTestClass   {
+  @JsonProperty("file")
+  private java.io.File file;
+
+  @JsonProperty("files")
+  @Valid
+  private List<java.io.File> files = null;
+
+  public FileSchemaTestClass file(java.io.File file) {
+    this.file = file;
+    return this;
+  }
+
+  /**
+   * Get file
+   * @return file
+  */
+  @Schema(name = "file", defaultValue = "")
+
+  @Valid
+
+  public java.io.File getFile() {
+    return file;
+  }
+
+  public void setFile(java.io.File file) {
+    this.file = file;
+  }
+
+  public FileSchemaTestClass files(List<java.io.File> files) {
+    this.files = files;
+    return this;
+  }
+
+  public FileSchemaTestClass addFilesItem(java.io.File filesItem) {
+    if (this.files == null) {
+      this.files = new ArrayList<>();
+    }
+    this.files.add(filesItem);
+    return this;
+  }
+
+  /**
+   * Get files
+   * @return files
+  */
+  @Schema(name = "files", defaultValue = "")
+
+  @Valid
+
+  public List<java.io.File> getFiles() {
+    return files;
+  }
+
+  public void setFiles(List<java.io.File> files) {
+    this.files = files;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    FileSchemaTestClass fileSchemaTestClass = (FileSchemaTestClass) o;
+    return Objects.equals(this.file, fileSchemaTestClass.file) &&
+        Objects.equals(this.files, fileSchemaTestClass.files);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(file, files);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class FileSchemaTestClass {\n");
+    
+    sb.append("    file: ").append(toIndentedString(file)).append("\n");
+    sb.append("    files: ").append(toIndentedString(files)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FormatTest.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FormatTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..6546370cd329ce02e7c034b5e3defbe1db6bde12
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FormatTest.java
@@ -0,0 +1,435 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.util.Arrays;
+import java.util.UUID;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * FormatTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FormatTest   {
+  @JsonProperty("integer")
+  private Integer integer;
+
+  @JsonProperty("int32")
+  private Integer int32;
+
+  @JsonProperty("int64")
+  private Long int64;
+
+  @JsonProperty("number")
+  private BigDecimal number;
+
+  @JsonProperty("float")
+  private Float _float;
+
+  @JsonProperty("double")
+  private Double _double;
+
+  @JsonProperty("string")
+  private String string;
+
+  @JsonProperty("byte")
+  private byte[] _byte;
+
+  @JsonProperty("binary")
+  private org.springframework.core.io.Resource binary;
+
+  @JsonProperty("date")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE)
+  private LocalDate date;
+
+  @JsonProperty("dateTime")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime dateTime;
+
+  @JsonProperty("uuid")
+  private UUID uuid;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("BigDecimal")
+  private BigDecimal bigDecimal;
+
+  public FormatTest integer(Integer integer) {
+    this.integer = integer;
+    return this;
+  }
+
+  /**
+   * Get integer
+   * minimum: 10
+   * maximum: 100
+   * @return integer
+  */
+  @Schema(name = "integer", defaultValue = "")
+
+@Min(10) @Max(100) 
+  public Integer getInteger() {
+    return integer;
+  }
+
+  public void setInteger(Integer integer) {
+    this.integer = integer;
+  }
+
+  public FormatTest int32(Integer int32) {
+    this.int32 = int32;
+    return this;
+  }
+
+  /**
+   * Get int32
+   * minimum: 20
+   * maximum: 200
+   * @return int32
+  */
+  @Schema(name = "int32", defaultValue = "")
+
+@Min(20) @Max(200) 
+  public Integer getInt32() {
+    return int32;
+  }
+
+  public void setInt32(Integer int32) {
+    this.int32 = int32;
+  }
+
+  public FormatTest int64(Long int64) {
+    this.int64 = int64;
+    return this;
+  }
+
+  /**
+   * Get int64
+   * @return int64
+  */
+  @Schema(name = "int64", defaultValue = "")
+
+
+  public Long getInt64() {
+    return int64;
+  }
+
+  public void setInt64(Long int64) {
+    this.int64 = int64;
+  }
+
+  public FormatTest number(BigDecimal number) {
+    this.number = number;
+    return this;
+  }
+
+  /**
+   * Get number
+   * minimum: 32.1
+   * maximum: 543.2
+   * @return number
+  */
+  @Schema(name = "number", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+@DecimalMin("32.1") @DecimalMax("543.2") 
+  public BigDecimal getNumber() {
+    return number;
+  }
+
+  public void setNumber(BigDecimal number) {
+    this.number = number;
+  }
+
+  public FormatTest _float(Float _float) {
+    this._float = _float;
+    return this;
+  }
+
+  /**
+   * Get _float
+   * minimum: 54.3
+   * maximum: 987.6
+   * @return _float
+  */
+  @Schema(name = "_float", defaultValue = "")
+
+@DecimalMin("54.3") @DecimalMax("987.6") 
+  public Float getFloat() {
+    return _float;
+  }
+
+  public void setFloat(Float _float) {
+    this._float = _float;
+  }
+
+  public FormatTest _double(Double _double) {
+    this._double = _double;
+    return this;
+  }
+
+  /**
+   * Get _double
+   * minimum: 67.8
+   * maximum: 123.4
+   * @return _double
+  */
+  @Schema(name = "_double", defaultValue = "")
+
+@DecimalMin("67.8") @DecimalMax("123.4") 
+  public Double getDouble() {
+    return _double;
+  }
+
+  public void setDouble(Double _double) {
+    this._double = _double;
+  }
+
+  public FormatTest string(String string) {
+    this.string = string;
+    return this;
+  }
+
+  /**
+   * Get string
+   * @return string
+  */
+  @Schema(name = "string", defaultValue = "")
+
+@Pattern(regexp = "/[a-z]/i") 
+  public String getString() {
+    return string;
+  }
+
+  public void setString(String string) {
+    this.string = string;
+  }
+
+  public FormatTest _byte(byte[] _byte) {
+    this._byte = _byte;
+    return this;
+  }
+
+  /**
+   * Get _byte
+   * @return _byte
+  */
+  @Schema(name = "_byte", required = true, defaultValue = "")
+  @NotNull
+
+
+  public byte[] getByte() {
+    return _byte;
+  }
+
+  public void setByte(byte[] _byte) {
+    this._byte = _byte;
+  }
+
+  public FormatTest binary(org.springframework.core.io.Resource binary) {
+    this.binary = binary;
+    return this;
+  }
+
+  /**
+   * Get binary
+   * @return binary
+  */
+  @Schema(name = "binary", defaultValue = "")
+
+  @Valid
+
+  public org.springframework.core.io.Resource getBinary() {
+    return binary;
+  }
+
+  public void setBinary(org.springframework.core.io.Resource binary) {
+    this.binary = binary;
+  }
+
+  public FormatTest date(LocalDate date) {
+    this.date = date;
+    return this;
+  }
+
+  /**
+   * Get date
+   * @return date
+  */
+  @Schema(name = "date", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public LocalDate getDate() {
+    return date;
+  }
+
+  public void setDate(LocalDate date) {
+    this.date = date;
+  }
+
+  public FormatTest dateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+    return this;
+  }
+
+  /**
+   * Get dateTime
+   * @return dateTime
+  */
+  @Schema(name = "dateTime", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getDateTime() {
+    return dateTime;
+  }
+
+  public void setDateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+  }
+
+  public FormatTest uuid(UUID uuid) {
+    this.uuid = uuid;
+    return this;
+  }
+
+  /**
+   * Get uuid
+   * @return uuid
+  */
+  @Schema(name = "uuid", example = "72f98069-206d-4f12-9f12-3d1e525a8e84", defaultValue = "")
+
+  @Valid
+
+  public UUID getUuid() {
+    return uuid;
+  }
+
+  public void setUuid(UUID uuid) {
+    this.uuid = uuid;
+  }
+
+  public FormatTest password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", required = true, defaultValue = "")
+  @NotNull
+
+@Size(min = 10, max = 64) 
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public FormatTest bigDecimal(BigDecimal bigDecimal) {
+    this.bigDecimal = bigDecimal;
+    return this;
+  }
+
+  /**
+   * Get bigDecimal
+   * @return bigDecimal
+  */
+  @Schema(name = "bigDecimal", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getBigDecimal() {
+    return bigDecimal;
+  }
+
+  public void setBigDecimal(BigDecimal bigDecimal) {
+    this.bigDecimal = bigDecimal;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    FormatTest formatTest = (FormatTest) o;
+    return Objects.equals(this.integer, formatTest.integer) &&
+        Objects.equals(this.int32, formatTest.int32) &&
+        Objects.equals(this.int64, formatTest.int64) &&
+        Objects.equals(this.number, formatTest.number) &&
+        Objects.equals(this._float, formatTest._float) &&
+        Objects.equals(this._double, formatTest._double) &&
+        Objects.equals(this.string, formatTest.string) &&
+        Arrays.equals(this._byte, formatTest._byte) &&
+        Objects.equals(this.binary, formatTest.binary) &&
+        Objects.equals(this.date, formatTest.date) &&
+        Objects.equals(this.dateTime, formatTest.dateTime) &&
+        Objects.equals(this.uuid, formatTest.uuid) &&
+        Objects.equals(this.password, formatTest.password) &&
+        Objects.equals(this.bigDecimal, formatTest.bigDecimal);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(integer, int32, int64, number, _float, _double, string, Arrays.hashCode(_byte), binary, date, dateTime, uuid, password, bigDecimal);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class FormatTest {\n");
+    
+    sb.append("    integer: ").append(toIndentedString(integer)).append("\n");
+    sb.append("    int32: ").append(toIndentedString(int32)).append("\n");
+    sb.append("    int64: ").append(toIndentedString(int64)).append("\n");
+    sb.append("    number: ").append(toIndentedString(number)).append("\n");
+    sb.append("    _float: ").append(toIndentedString(_float)).append("\n");
+    sb.append("    _double: ").append(toIndentedString(_double)).append("\n");
+    sb.append("    string: ").append(toIndentedString(string)).append("\n");
+    sb.append("    _byte: ").append(toIndentedString(_byte)).append("\n");
+    sb.append("    binary: ").append(toIndentedString(binary)).append("\n");
+    sb.append("    date: ").append(toIndentedString(date)).append("\n");
+    sb.append("    dateTime: ").append(toIndentedString(dateTime)).append("\n");
+    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    bigDecimal: ").append(toIndentedString(bigDecimal)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfb615a529fcf851112e0d03ebdda2b88636dd2e
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * HasOnlyReadOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class HasOnlyReadOnly   {
+  @JsonProperty("bar")
+  private String bar;
+
+  @JsonProperty("foo")
+  private String foo;
+
+  public HasOnlyReadOnly bar(String bar) {
+    this.bar = bar;
+    return this;
+  }
+
+  /**
+   * Get bar
+   * @return bar
+  */
+  @Schema(name = "bar", readOnly = true, defaultValue = "")
+
+
+  public String getBar() {
+    return bar;
+  }
+
+  public void setBar(String bar) {
+    this.bar = bar;
+  }
+
+  public HasOnlyReadOnly foo(String foo) {
+    this.foo = foo;
+    return this;
+  }
+
+  /**
+   * Get foo
+   * @return foo
+  */
+  @Schema(name = "foo", readOnly = true, defaultValue = "")
+
+
+  public String getFoo() {
+    return foo;
+  }
+
+  public void setFoo(String foo) {
+    this.foo = foo;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    HasOnlyReadOnly hasOnlyReadOnly = (HasOnlyReadOnly) o;
+    return Objects.equals(this.bar, hasOnlyReadOnly.bar) &&
+        Objects.equals(this.foo, hasOnlyReadOnly.foo);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(bar, foo);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class HasOnlyReadOnly {\n");
+    
+    sb.append("    bar: ").append(toIndentedString(bar)).append("\n");
+    sb.append("    foo: ").append(toIndentedString(foo)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/MapTest.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/MapTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ff73062758f04ef937017393c488750cc744270
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/MapTest.java
@@ -0,0 +1,234 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * MapTest
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MapTest   {
+  @JsonProperty("map_map_of_string")
+  @Valid
+  private Map<String, Map<String, String>> mapMapOfString = null;
+
+  /**
+   * Gets or Sets inner
+   */
+  public enum InnerEnum {
+    UPPER("UPPER"),
+    
+    LOWER("lower");
+
+    private String value;
+
+    InnerEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static InnerEnum fromValue(String value) {
+      for (InnerEnum b : InnerEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("map_of_enum_string")
+  @Valid
+  private Map<String, InnerEnum> mapOfEnumString = null;
+
+  @JsonProperty("direct_map")
+  @Valid
+  private Map<String, Boolean> directMap = null;
+
+  @JsonProperty("indirect_map")
+  @Valid
+  private Map<String, Boolean> indirectMap = null;
+
+  public MapTest mapMapOfString(Map<String, Map<String, String>> mapMapOfString) {
+    this.mapMapOfString = mapMapOfString;
+    return this;
+  }
+
+  public MapTest putMapMapOfStringItem(String key, Map<String, String> mapMapOfStringItem) {
+    if (this.mapMapOfString == null) {
+      this.mapMapOfString = new HashMap<>();
+    }
+    this.mapMapOfString.put(key, mapMapOfStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapMapOfString
+   * @return mapMapOfString
+  */
+  @Schema(name = "mapMapOfString", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Map<String, String>> getMapMapOfString() {
+    return mapMapOfString;
+  }
+
+  public void setMapMapOfString(Map<String, Map<String, String>> mapMapOfString) {
+    this.mapMapOfString = mapMapOfString;
+  }
+
+  public MapTest mapOfEnumString(Map<String, InnerEnum> mapOfEnumString) {
+    this.mapOfEnumString = mapOfEnumString;
+    return this;
+  }
+
+  public MapTest putMapOfEnumStringItem(String key, InnerEnum mapOfEnumStringItem) {
+    if (this.mapOfEnumString == null) {
+      this.mapOfEnumString = new HashMap<>();
+    }
+    this.mapOfEnumString.put(key, mapOfEnumStringItem);
+    return this;
+  }
+
+  /**
+   * Get mapOfEnumString
+   * @return mapOfEnumString
+  */
+  @Schema(name = "mapOfEnumString", defaultValue = "")
+
+
+  public Map<String, InnerEnum> getMapOfEnumString() {
+    return mapOfEnumString;
+  }
+
+  public void setMapOfEnumString(Map<String, InnerEnum> mapOfEnumString) {
+    this.mapOfEnumString = mapOfEnumString;
+  }
+
+  public MapTest directMap(Map<String, Boolean> directMap) {
+    this.directMap = directMap;
+    return this;
+  }
+
+  public MapTest putDirectMapItem(String key, Boolean directMapItem) {
+    if (this.directMap == null) {
+      this.directMap = new HashMap<>();
+    }
+    this.directMap.put(key, directMapItem);
+    return this;
+  }
+
+  /**
+   * Get directMap
+   * @return directMap
+  */
+  @Schema(name = "directMap", defaultValue = "")
+
+
+  public Map<String, Boolean> getDirectMap() {
+    return directMap;
+  }
+
+  public void setDirectMap(Map<String, Boolean> directMap) {
+    this.directMap = directMap;
+  }
+
+  public MapTest indirectMap(Map<String, Boolean> indirectMap) {
+    this.indirectMap = indirectMap;
+    return this;
+  }
+
+  public MapTest putIndirectMapItem(String key, Boolean indirectMapItem) {
+    if (this.indirectMap == null) {
+      this.indirectMap = new HashMap<>();
+    }
+    this.indirectMap.put(key, indirectMapItem);
+    return this;
+  }
+
+  /**
+   * Get indirectMap
+   * @return indirectMap
+  */
+  @Schema(name = "indirectMap", defaultValue = "")
+
+
+  public Map<String, Boolean> getIndirectMap() {
+    return indirectMap;
+  }
+
+  public void setIndirectMap(Map<String, Boolean> indirectMap) {
+    this.indirectMap = indirectMap;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MapTest mapTest = (MapTest) o;
+    return Objects.equals(this.mapMapOfString, mapTest.mapMapOfString) &&
+        Objects.equals(this.mapOfEnumString, mapTest.mapOfEnumString) &&
+        Objects.equals(this.directMap, mapTest.directMap) &&
+        Objects.equals(this.indirectMap, mapTest.indirectMap);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(mapMapOfString, mapOfEnumString, directMap, indirectMap);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MapTest {\n");
+    
+    sb.append("    mapMapOfString: ").append(toIndentedString(mapMapOfString)).append("\n");
+    sb.append("    mapOfEnumString: ").append(toIndentedString(mapOfEnumString)).append("\n");
+    sb.append("    directMap: ").append(toIndentedString(directMap)).append("\n");
+    sb.append("    indirectMap: ").append(toIndentedString(indirectMap)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..03a7be43cc4a606ba8a493c1868c6d25eb1bfdd9
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
@@ -0,0 +1,152 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.time.OffsetDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.openapitools.model.Animal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * MixedPropertiesAndAdditionalPropertiesClass
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MixedPropertiesAndAdditionalPropertiesClass   {
+  @JsonProperty("uuid")
+  private UUID uuid;
+
+  @JsonProperty("dateTime")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime dateTime;
+
+  @JsonProperty("map")
+  @Valid
+  private Map<String, Animal> map = null;
+
+  public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) {
+    this.uuid = uuid;
+    return this;
+  }
+
+  /**
+   * Get uuid
+   * @return uuid
+  */
+  @Schema(name = "uuid", defaultValue = "")
+
+  @Valid
+
+  public UUID getUuid() {
+    return uuid;
+  }
+
+  public void setUuid(UUID uuid) {
+    this.uuid = uuid;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass dateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+    return this;
+  }
+
+  /**
+   * Get dateTime
+   * @return dateTime
+  */
+  @Schema(name = "dateTime", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getDateTime() {
+    return dateTime;
+  }
+
+  public void setDateTime(OffsetDateTime dateTime) {
+    this.dateTime = dateTime;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass map(Map<String, Animal> map) {
+    this.map = map;
+    return this;
+  }
+
+  public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal mapItem) {
+    if (this.map == null) {
+      this.map = new HashMap<>();
+    }
+    this.map.put(key, mapItem);
+    return this;
+  }
+
+  /**
+   * Get map
+   * @return map
+  */
+  @Schema(name = "map", defaultValue = "")
+
+  @Valid
+
+  public Map<String, Animal> getMap() {
+    return map;
+  }
+
+  public void setMap(Map<String, Animal> map) {
+    this.map = map;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MixedPropertiesAndAdditionalPropertiesClass mixedPropertiesAndAdditionalPropertiesClass = (MixedPropertiesAndAdditionalPropertiesClass) o;
+    return Objects.equals(this.uuid, mixedPropertiesAndAdditionalPropertiesClass.uuid) &&
+        Objects.equals(this.dateTime, mixedPropertiesAndAdditionalPropertiesClass.dateTime) &&
+        Objects.equals(this.map, mixedPropertiesAndAdditionalPropertiesClass.map);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(uuid, dateTime, map);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MixedPropertiesAndAdditionalPropertiesClass {\n");
+    
+    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
+    sb.append("    dateTime: ").append(toIndentedString(dateTime)).append("\n");
+    sb.append("    map: ").append(toIndentedString(map)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Model200Response.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Model200Response.java
new file mode 100644
index 0000000000000000000000000000000000000000..77bf91649b08bc0b9401643f4a917f1c44ee5aef
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Model200Response.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model name starting with number
+ */
+@Schema(name = "200_response",description = "Model for testing model name starting with number")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Model200Response   {
+  @JsonProperty("name")
+  private Integer name;
+
+  @JsonProperty("class")
+  private String propertyClass;
+
+  public Model200Response name(Integer name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public Integer getName() {
+    return name;
+  }
+
+  public void setName(Integer name) {
+    this.name = name;
+  }
+
+  public Model200Response propertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+    return this;
+  }
+
+  /**
+   * Get propertyClass
+   * @return propertyClass
+  */
+  @Schema(name = "propertyClass", defaultValue = "")
+
+
+  public String getPropertyClass() {
+    return propertyClass;
+  }
+
+  public void setPropertyClass(String propertyClass) {
+    this.propertyClass = propertyClass;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Model200Response _200response = (Model200Response) o;
+    return Objects.equals(this.name, _200response.name) &&
+        Objects.equals(this.propertyClass, _200response.propertyClass);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, propertyClass);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Model200Response {\n");
+    
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    propertyClass: ").append(toIndentedString(propertyClass)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ModelApiResponse.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ModelApiResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..2443600df226840aa8f7adc54617d4cca257329d
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ModelApiResponse.java
@@ -0,0 +1,133 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ModelApiResponse
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelApiResponse   {
+  @JsonProperty("code")
+  private Integer code;
+
+  @JsonProperty("type")
+  private String type;
+
+  @JsonProperty("message")
+  private String message;
+
+  public ModelApiResponse code(Integer code) {
+    this.code = code;
+    return this;
+  }
+
+  /**
+   * Get code
+   * @return code
+  */
+  @Schema(name = "code", defaultValue = "")
+
+
+  public Integer getCode() {
+    return code;
+  }
+
+  public void setCode(Integer code) {
+    this.code = code;
+  }
+
+  public ModelApiResponse type(String type) {
+    this.type = type;
+    return this;
+  }
+
+  /**
+   * Get type
+   * @return type
+  */
+  @Schema(name = "type", defaultValue = "")
+
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public ModelApiResponse message(String message) {
+    this.message = message;
+    return this;
+  }
+
+  /**
+   * Get message
+   * @return message
+  */
+  @Schema(name = "message", defaultValue = "")
+
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelApiResponse _apiResponse = (ModelApiResponse) o;
+    return Objects.equals(this.code, _apiResponse.code) &&
+        Objects.equals(this.type, _apiResponse.type) &&
+        Objects.equals(this.message, _apiResponse.message);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(code, type, message);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelApiResponse {\n");
+    
+    sb.append("    code: ").append(toIndentedString(code)).append("\n");
+    sb.append("    type: ").append(toIndentedString(type)).append("\n");
+    sb.append("    message: ").append(toIndentedString(message)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ModelReturn.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ModelReturn.java
new file mode 100644
index 0000000000000000000000000000000000000000..0301a47e9f3e7c7f7c18f5cdfdcbe916c12fd340
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ModelReturn.java
@@ -0,0 +1,84 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing reserved words
+ */
+@Schema(name = "Return",description = "Model for testing reserved words")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelReturn   {
+  @JsonProperty("return")
+  private Integer _return;
+
+  public ModelReturn _return(Integer _return) {
+    this._return = _return;
+    return this;
+  }
+
+  /**
+   * Get _return
+   * @return _return
+  */
+  @Schema(name = "_return", defaultValue = "")
+
+
+  public Integer getReturn() {
+    return _return;
+  }
+
+  public void setReturn(Integer _return) {
+    this._return = _return;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelReturn _return = (ModelReturn) o;
+    return Objects.equals(this._return, _return._return);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(_return);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelReturn {\n");
+    
+    sb.append("    _return: ").append(toIndentedString(_return)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Name.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Name.java
new file mode 100644
index 0000000000000000000000000000000000000000..62a16f80ee07ade8aaa8159110929935a3b8d6e0
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Name.java
@@ -0,0 +1,160 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Model for testing model name same as property name
+ */
+@Schema(name = "Name",description = "Model for testing model name same as property name")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Name   {
+  @JsonProperty("name")
+  private Integer name;
+
+  @JsonProperty("snake_case")
+  private Integer snakeCase;
+
+  @JsonProperty("property")
+  private String property;
+
+  @JsonProperty("123Number")
+  private Integer _123number;
+
+  public Name name(Integer name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getName() {
+    return name;
+  }
+
+  public void setName(Integer name) {
+    this.name = name;
+  }
+
+  public Name snakeCase(Integer snakeCase) {
+    this.snakeCase = snakeCase;
+    return this;
+  }
+
+  /**
+   * Get snakeCase
+   * @return snakeCase
+  */
+  @Schema(name = "snakeCase", readOnly = true, defaultValue = "")
+
+
+  public Integer getSnakeCase() {
+    return snakeCase;
+  }
+
+  public void setSnakeCase(Integer snakeCase) {
+    this.snakeCase = snakeCase;
+  }
+
+  public Name property(String property) {
+    this.property = property;
+    return this;
+  }
+
+  /**
+   * Get property
+   * @return property
+  */
+  @Schema(name = "property", defaultValue = "")
+
+
+  public String getProperty() {
+    return property;
+  }
+
+  public void setProperty(String property) {
+    this.property = property;
+  }
+
+  public Name _123number(Integer _123number) {
+    this._123number = _123number;
+    return this;
+  }
+
+  /**
+   * Get _123number
+   * @return _123number
+  */
+  @Schema(name = "_123number", readOnly = true, defaultValue = "")
+
+
+  public Integer get123number() {
+    return _123number;
+  }
+
+  public void set123number(Integer _123number) {
+    this._123number = _123number;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Name name = (Name) o;
+    return Objects.equals(this.name, name.name) &&
+        Objects.equals(this.snakeCase, name.snakeCase) &&
+        Objects.equals(this.property, name.property) &&
+        Objects.equals(this._123number, name._123number);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, snakeCase, property, _123number);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Name {\n");
+    
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    snakeCase: ").append(toIndentedString(snakeCase)).append("\n");
+    sb.append("    property: ").append(toIndentedString(property)).append("\n");
+    sb.append("    _123number: ").append(toIndentedString(_123number)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/NumberOnly.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/NumberOnly.java
new file mode 100644
index 0000000000000000000000000000000000000000..521fad80d5a722f8bd3eb3072d330aa63ae083a3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/NumberOnly.java
@@ -0,0 +1,85 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * NumberOnly
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class NumberOnly   {
+  @JsonProperty("JustNumber")
+  private BigDecimal justNumber;
+
+  public NumberOnly justNumber(BigDecimal justNumber) {
+    this.justNumber = justNumber;
+    return this;
+  }
+
+  /**
+   * Get justNumber
+   * @return justNumber
+  */
+  @Schema(name = "justNumber", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getJustNumber() {
+    return justNumber;
+  }
+
+  public void setJustNumber(BigDecimal justNumber) {
+    this.justNumber = justNumber;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    NumberOnly numberOnly = (NumberOnly) o;
+    return Objects.equals(this.justNumber, numberOnly.justNumber);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(justNumber);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class NumberOnly {\n");
+    
+    sb.append("    justNumber: ").append(toIndentedString(justNumber)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Order.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Order.java
new file mode 100644
index 0000000000000000000000000000000000000000..05071bdfe2bf754e2c7b8a18163b19c502908aff
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Order.java
@@ -0,0 +1,249 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.time.OffsetDateTime;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Order
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Order   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("petId")
+  private Long petId;
+
+  @JsonProperty("quantity")
+  private Integer quantity;
+
+  @JsonProperty("shipDate")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime shipDate;
+
+  /**
+   * Order Status
+   */
+  public enum StatusEnum {
+    PLACED("placed"),
+    
+    APPROVED("approved"),
+    
+    DELIVERED("delivered");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  @JsonProperty("complete")
+  private Boolean complete = false;
+
+  public Order id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Order petId(Long petId) {
+    this.petId = petId;
+    return this;
+  }
+
+  /**
+   * Get petId
+   * @return petId
+  */
+  @Schema(name = "petId", defaultValue = "")
+
+
+  public Long getPetId() {
+    return petId;
+  }
+
+  public void setPetId(Long petId) {
+    this.petId = petId;
+  }
+
+  public Order quantity(Integer quantity) {
+    this.quantity = quantity;
+    return this;
+  }
+
+  /**
+   * Get quantity
+   * @return quantity
+  */
+  @Schema(name = "quantity", defaultValue = "")
+
+
+  public Integer getQuantity() {
+    return quantity;
+  }
+
+  public void setQuantity(Integer quantity) {
+    this.quantity = quantity;
+  }
+
+  public Order shipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+    return this;
+  }
+
+  /**
+   * Get shipDate
+   * @return shipDate
+  */
+  @Schema(name = "shipDate", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getShipDate() {
+    return shipDate;
+  }
+
+  public void setShipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+  }
+
+  public Order status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Order Status
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "Order Status")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+  public Order complete(Boolean complete) {
+    this.complete = complete;
+    return this;
+  }
+
+  /**
+   * Get complete
+   * @return complete
+  */
+  @Schema(name = "complete", defaultValue = "")
+
+
+  public Boolean getComplete() {
+    return complete;
+  }
+
+  public void setComplete(Boolean complete) {
+    this.complete = complete;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Order order = (Order) o;
+    return Objects.equals(this.id, order.id) &&
+        Objects.equals(this.petId, order.petId) &&
+        Objects.equals(this.quantity, order.quantity) &&
+        Objects.equals(this.shipDate, order.shipDate) &&
+        Objects.equals(this.status, order.status) &&
+        Objects.equals(this.complete, order.complete);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, petId, quantity, shipDate, status, complete);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Order {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    petId: ").append(toIndentedString(petId)).append("\n");
+    sb.append("    quantity: ").append(toIndentedString(quantity)).append("\n");
+    sb.append("    shipDate: ").append(toIndentedString(shipDate)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    complete: ").append(toIndentedString(complete)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/OuterComposite.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/OuterComposite.java
new file mode 100644
index 0000000000000000000000000000000000000000..a721a3dde6a085844d35e03e0dfcf67a5febf507
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/OuterComposite.java
@@ -0,0 +1,135 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * OuterComposite
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class OuterComposite   {
+  @JsonProperty("my_number")
+  private BigDecimal myNumber;
+
+  @JsonProperty("my_string")
+  private String myString;
+
+  @JsonProperty("my_boolean")
+  private Boolean myBoolean;
+
+  public OuterComposite myNumber(BigDecimal myNumber) {
+    this.myNumber = myNumber;
+    return this;
+  }
+
+  /**
+   * Get myNumber
+   * @return myNumber
+  */
+  @Schema(name = "myNumber", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getMyNumber() {
+    return myNumber;
+  }
+
+  public void setMyNumber(BigDecimal myNumber) {
+    this.myNumber = myNumber;
+  }
+
+  public OuterComposite myString(String myString) {
+    this.myString = myString;
+    return this;
+  }
+
+  /**
+   * Get myString
+   * @return myString
+  */
+  @Schema(name = "myString", defaultValue = "")
+
+
+  public String getMyString() {
+    return myString;
+  }
+
+  public void setMyString(String myString) {
+    this.myString = myString;
+  }
+
+  public OuterComposite myBoolean(Boolean myBoolean) {
+    this.myBoolean = myBoolean;
+    return this;
+  }
+
+  /**
+   * Get myBoolean
+   * @return myBoolean
+  */
+  @Schema(name = "myBoolean", defaultValue = "")
+
+
+  public Boolean getMyBoolean() {
+    return myBoolean;
+  }
+
+  public void setMyBoolean(Boolean myBoolean) {
+    this.myBoolean = myBoolean;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    OuterComposite outerComposite = (OuterComposite) o;
+    return Objects.equals(this.myNumber, outerComposite.myNumber) &&
+        Objects.equals(this.myString, outerComposite.myString) &&
+        Objects.equals(this.myBoolean, outerComposite.myBoolean);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(myNumber, myString, myBoolean);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class OuterComposite {\n");
+    
+    sb.append("    myNumber: ").append(toIndentedString(myNumber)).append("\n");
+    sb.append("    myString: ").append(toIndentedString(myString)).append("\n");
+    sb.append("    myBoolean: ").append(toIndentedString(myBoolean)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/OuterEnum.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/OuterEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba0cca8a5e815e7cbeaade6896dd0e834ef7b4fe
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/OuterEnum.java
@@ -0,0 +1,55 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets OuterEnum
+ */
+public enum OuterEnum {
+  
+  PLACED("placed"),
+  
+  APPROVED("approved"),
+  
+  DELIVERED("delivered");
+
+  private String value;
+
+  OuterEnum(String value) {
+    this.value = value;
+  }
+
+  @JsonValue
+  public String getValue() {
+    return value;
+  }
+
+  @Override
+  public String toString() {
+    return String.valueOf(value);
+  }
+
+  @JsonCreator
+  public static OuterEnum fromValue(String value) {
+    for (OuterEnum b : OuterEnum.values()) {
+      if (b.value.equals(value)) {
+        return b;
+      }
+    }
+    throw new IllegalArgumentException("Unexpected value '" + value + "'");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Pet.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Pet.java
new file mode 100644
index 0000000000000000000000000000000000000000..988eb317134d1171efe16791018e271e4bc1b30f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Pet.java
@@ -0,0 +1,273 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import org.openapitools.model.Category;
+import org.openapitools.model.Tag;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Pet
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Pet   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("category")
+  private Category category;
+
+  @JsonProperty("name")
+  private String name;
+
+  @JsonProperty("photoUrls")
+  @Valid
+  private Set<String> photoUrls = new LinkedHashSet<>();
+
+  @JsonProperty("tags")
+  @Valid
+  private List<Tag> tags = null;
+
+  /**
+   * pet status in the store
+   */
+  public enum StatusEnum {
+    AVAILABLE("available"),
+    
+    PENDING("pending"),
+    
+    SOLD("sold");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  public Pet id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Pet category(Category category) {
+    this.category = category;
+    return this;
+  }
+
+  /**
+   * Get category
+   * @return category
+  */
+  @Schema(name = "category", defaultValue = "")
+
+  @Valid
+
+  public Category getCategory() {
+    return category;
+  }
+
+  public void setCategory(Category category) {
+    this.category = category;
+  }
+
+  public Pet name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", example = "doggie", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public Pet photoUrls(Set<String> photoUrls) {
+    this.photoUrls = photoUrls;
+    return this;
+  }
+
+  public Pet addPhotoUrlsItem(String photoUrlsItem) {
+    this.photoUrls.add(photoUrlsItem);
+    return this;
+  }
+
+  /**
+   * Get photoUrls
+   * @return photoUrls
+  */
+  @Schema(name = "photoUrls", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Set<String> getPhotoUrls() {
+    return photoUrls;
+  }
+
+  @JsonDeserialize(as = LinkedHashSet.class)
+  public void setPhotoUrls(Set<String> photoUrls) {
+    this.photoUrls = photoUrls;
+  }
+
+  public Pet tags(List<Tag> tags) {
+    this.tags = tags;
+    return this;
+  }
+
+  public Pet addTagsItem(Tag tagsItem) {
+    if (this.tags == null) {
+      this.tags = new ArrayList<>();
+    }
+    this.tags.add(tagsItem);
+    return this;
+  }
+
+  /**
+   * Get tags
+   * @return tags
+  */
+  @Schema(name = "tags", defaultValue = "")
+
+  @Valid
+
+  public List<Tag> getTags() {
+    return tags;
+  }
+
+  public void setTags(List<Tag> tags) {
+    this.tags = tags;
+  }
+
+  public Pet status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * pet status in the store
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "pet status in the store")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Pet pet = (Pet) o;
+    return Objects.equals(this.id, pet.id) &&
+        Objects.equals(this.category, pet.category) &&
+        Objects.equals(this.name, pet.name) &&
+        Objects.equals(this.photoUrls, pet.photoUrls) &&
+        Objects.equals(this.tags, pet.tags) &&
+        Objects.equals(this.status, pet.status);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, category, name, photoUrls, tags, status);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Pet {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    category: ").append(toIndentedString(category)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    photoUrls: ").append(toIndentedString(photoUrls)).append("\n");
+    sb.append("    tags: ").append(toIndentedString(tags)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ReadOnlyFirst.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ReadOnlyFirst.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c51770a8e662dd5d57de2c19f502e9d536db08a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/ReadOnlyFirst.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * ReadOnlyFirst
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ReadOnlyFirst   {
+  @JsonProperty("bar")
+  private String bar;
+
+  @JsonProperty("baz")
+  private String baz;
+
+  public ReadOnlyFirst bar(String bar) {
+    this.bar = bar;
+    return this;
+  }
+
+  /**
+   * Get bar
+   * @return bar
+  */
+  @Schema(name = "bar", readOnly = true, defaultValue = "")
+
+
+  public String getBar() {
+    return bar;
+  }
+
+  public void setBar(String bar) {
+    this.bar = bar;
+  }
+
+  public ReadOnlyFirst baz(String baz) {
+    this.baz = baz;
+    return this;
+  }
+
+  /**
+   * Get baz
+   * @return baz
+  */
+  @Schema(name = "baz", defaultValue = "")
+
+
+  public String getBaz() {
+    return baz;
+  }
+
+  public void setBaz(String baz) {
+    this.baz = baz;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ReadOnlyFirst readOnlyFirst = (ReadOnlyFirst) o;
+    return Objects.equals(this.bar, readOnlyFirst.bar) &&
+        Objects.equals(this.baz, readOnlyFirst.baz);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(bar, baz);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ReadOnlyFirst {\n");
+    
+    sb.append("    bar: ").append(toIndentedString(bar)).append("\n");
+    sb.append("    baz: ").append(toIndentedString(baz)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/SpecialModelName.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/SpecialModelName.java
new file mode 100644
index 0000000000000000000000000000000000000000..75f4be4e9f8f067ae60abd1268d60347d2d95724
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/SpecialModelName.java
@@ -0,0 +1,83 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * SpecialModelName
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class SpecialModelName   {
+  @JsonProperty("$special[property.name]")
+  private Long $specialPropertyName;
+
+  public SpecialModelName $specialPropertyName(Long $specialPropertyName) {
+    this.$specialPropertyName = $specialPropertyName;
+    return this;
+  }
+
+  /**
+   * Get $specialPropertyName
+   * @return $specialPropertyName
+  */
+  @Schema(name = "$specialPropertyName", defaultValue = "")
+
+
+  public Long get$SpecialPropertyName() {
+    return $specialPropertyName;
+  }
+
+  public void set$SpecialPropertyName(Long $specialPropertyName) {
+    this.$specialPropertyName = $specialPropertyName;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SpecialModelName $specialModelName = (SpecialModelName) o;
+    return Objects.equals(this.$specialPropertyName, $specialModelName.$specialPropertyName);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash($specialPropertyName);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SpecialModelName {\n");
+    
+    sb.append("    $specialPropertyName: ").append(toIndentedString($specialPropertyName)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Tag.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Tag.java
new file mode 100644
index 0000000000000000000000000000000000000000..8722df999bfc306ae4cdd20cb567d8dd9247ac02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/Tag.java
@@ -0,0 +1,108 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Tag
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Tag   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Tag id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Tag name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Tag tag = (Tag) o;
+    return Objects.equals(this.id, tag.id) &&
+        Objects.equals(this.name, tag.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Tag {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/TypeHolderDefault.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/TypeHolderDefault.java
new file mode 100644
index 0000000000000000000000000000000000000000..19e9bf310f769ea1e09ee1c959df0a77f3a10215
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/TypeHolderDefault.java
@@ -0,0 +1,198 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * TypeHolderDefault
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class TypeHolderDefault   {
+  @JsonProperty("string_item")
+  private String stringItem = "what";
+
+  @JsonProperty("number_item")
+  private BigDecimal numberItem;
+
+  @JsonProperty("integer_item")
+  private Integer integerItem;
+
+  @JsonProperty("bool_item")
+  private Boolean boolItem = true;
+
+  @JsonProperty("array_item")
+  @Valid
+  private List<Integer> arrayItem = new ArrayList<>();
+
+  public TypeHolderDefault stringItem(String stringItem) {
+    this.stringItem = stringItem;
+    return this;
+  }
+
+  /**
+   * Get stringItem
+   * @return stringItem
+  */
+  @Schema(name = "stringItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getStringItem() {
+    return stringItem;
+  }
+
+  public void setStringItem(String stringItem) {
+    this.stringItem = stringItem;
+  }
+
+  public TypeHolderDefault numberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+    return this;
+  }
+
+  /**
+   * Get numberItem
+   * @return numberItem
+  */
+  @Schema(name = "numberItem", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public BigDecimal getNumberItem() {
+    return numberItem;
+  }
+
+  public void setNumberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+  }
+
+  public TypeHolderDefault integerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+    return this;
+  }
+
+  /**
+   * Get integerItem
+   * @return integerItem
+  */
+  @Schema(name = "integerItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getIntegerItem() {
+    return integerItem;
+  }
+
+  public void setIntegerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+  }
+
+  public TypeHolderDefault boolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+    return this;
+  }
+
+  /**
+   * Get boolItem
+   * @return boolItem
+  */
+  @Schema(name = "boolItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Boolean getBoolItem() {
+    return boolItem;
+  }
+
+  public void setBoolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+  }
+
+  public TypeHolderDefault arrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+    return this;
+  }
+
+  public TypeHolderDefault addArrayItemItem(Integer arrayItemItem) {
+    this.arrayItem.add(arrayItemItem);
+    return this;
+  }
+
+  /**
+   * Get arrayItem
+   * @return arrayItem
+  */
+  @Schema(name = "arrayItem", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<Integer> getArrayItem() {
+    return arrayItem;
+  }
+
+  public void setArrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TypeHolderDefault typeHolderDefault = (TypeHolderDefault) o;
+    return Objects.equals(this.stringItem, typeHolderDefault.stringItem) &&
+        Objects.equals(this.numberItem, typeHolderDefault.numberItem) &&
+        Objects.equals(this.integerItem, typeHolderDefault.integerItem) &&
+        Objects.equals(this.boolItem, typeHolderDefault.boolItem) &&
+        Objects.equals(this.arrayItem, typeHolderDefault.arrayItem);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(stringItem, numberItem, integerItem, boolItem, arrayItem);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TypeHolderDefault {\n");
+    
+    sb.append("    stringItem: ").append(toIndentedString(stringItem)).append("\n");
+    sb.append("    numberItem: ").append(toIndentedString(numberItem)).append("\n");
+    sb.append("    integerItem: ").append(toIndentedString(integerItem)).append("\n");
+    sb.append("    boolItem: ").append(toIndentedString(boolItem)).append("\n");
+    sb.append("    arrayItem: ").append(toIndentedString(arrayItem)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/TypeHolderExample.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/TypeHolderExample.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9a3762bc74b482b1d24566ae6837fd1c4952a8f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/TypeHolderExample.java
@@ -0,0 +1,224 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * TypeHolderExample
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class TypeHolderExample   {
+  @JsonProperty("string_item")
+  private String stringItem;
+
+  @JsonProperty("number_item")
+  private BigDecimal numberItem;
+
+  @JsonProperty("float_item")
+  private Float floatItem;
+
+  @JsonProperty("integer_item")
+  private Integer integerItem;
+
+  @JsonProperty("bool_item")
+  private Boolean boolItem;
+
+  @JsonProperty("array_item")
+  @Valid
+  private List<Integer> arrayItem = new ArrayList<>();
+
+  public TypeHolderExample stringItem(String stringItem) {
+    this.stringItem = stringItem;
+    return this;
+  }
+
+  /**
+   * Get stringItem
+   * @return stringItem
+  */
+  @Schema(name = "stringItem", example = "what", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getStringItem() {
+    return stringItem;
+  }
+
+  public void setStringItem(String stringItem) {
+    this.stringItem = stringItem;
+  }
+
+  public TypeHolderExample numberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+    return this;
+  }
+
+  /**
+   * Get numberItem
+   * @return numberItem
+  */
+  @Schema(name = "numberItem", example = "1.234", required = true, defaultValue = "")
+  @NotNull
+
+  @Valid
+
+  public BigDecimal getNumberItem() {
+    return numberItem;
+  }
+
+  public void setNumberItem(BigDecimal numberItem) {
+    this.numberItem = numberItem;
+  }
+
+  public TypeHolderExample floatItem(Float floatItem) {
+    this.floatItem = floatItem;
+    return this;
+  }
+
+  /**
+   * Get floatItem
+   * @return floatItem
+  */
+  @Schema(name = "floatItem", example = "1.234", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Float getFloatItem() {
+    return floatItem;
+  }
+
+  public void setFloatItem(Float floatItem) {
+    this.floatItem = floatItem;
+  }
+
+  public TypeHolderExample integerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+    return this;
+  }
+
+  /**
+   * Get integerItem
+   * @return integerItem
+  */
+  @Schema(name = "integerItem", example = "-2", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Integer getIntegerItem() {
+    return integerItem;
+  }
+
+  public void setIntegerItem(Integer integerItem) {
+    this.integerItem = integerItem;
+  }
+
+  public TypeHolderExample boolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+    return this;
+  }
+
+  /**
+   * Get boolItem
+   * @return boolItem
+  */
+  @Schema(name = "boolItem", example = "true", required = true, defaultValue = "")
+  @NotNull
+
+
+  public Boolean getBoolItem() {
+    return boolItem;
+  }
+
+  public void setBoolItem(Boolean boolItem) {
+    this.boolItem = boolItem;
+  }
+
+  public TypeHolderExample arrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+    return this;
+  }
+
+  public TypeHolderExample addArrayItemItem(Integer arrayItemItem) {
+    this.arrayItem.add(arrayItemItem);
+    return this;
+  }
+
+  /**
+   * Get arrayItem
+   * @return arrayItem
+  */
+  @Schema(name = "arrayItem", example = "[0, 1, 2, 3]", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<Integer> getArrayItem() {
+    return arrayItem;
+  }
+
+  public void setArrayItem(List<Integer> arrayItem) {
+    this.arrayItem = arrayItem;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TypeHolderExample typeHolderExample = (TypeHolderExample) o;
+    return Objects.equals(this.stringItem, typeHolderExample.stringItem) &&
+        Objects.equals(this.numberItem, typeHolderExample.numberItem) &&
+        Objects.equals(this.floatItem, typeHolderExample.floatItem) &&
+        Objects.equals(this.integerItem, typeHolderExample.integerItem) &&
+        Objects.equals(this.boolItem, typeHolderExample.boolItem) &&
+        Objects.equals(this.arrayItem, typeHolderExample.arrayItem);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(stringItem, numberItem, floatItem, integerItem, boolItem, arrayItem);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TypeHolderExample {\n");
+    
+    sb.append("    stringItem: ").append(toIndentedString(stringItem)).append("\n");
+    sb.append("    numberItem: ").append(toIndentedString(numberItem)).append("\n");
+    sb.append("    floatItem: ").append(toIndentedString(floatItem)).append("\n");
+    sb.append("    integerItem: ").append(toIndentedString(integerItem)).append("\n");
+    sb.append("    boolItem: ").append(toIndentedString(boolItem)).append("\n");
+    sb.append("    arrayItem: ").append(toIndentedString(arrayItem)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/User.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..83152a155535be4664d8a23d2cadc8f922021653
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/User.java
@@ -0,0 +1,258 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * User
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class User   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("username")
+  private String username;
+
+  @JsonProperty("firstName")
+  private String firstName;
+
+  @JsonProperty("lastName")
+  private String lastName;
+
+  @JsonProperty("email")
+  private String email;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("phone")
+  private String phone;
+
+  @JsonProperty("userStatus")
+  private Integer userStatus;
+
+  public User id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public User username(String username) {
+    this.username = username;
+    return this;
+  }
+
+  /**
+   * Get username
+   * @return username
+  */
+  @Schema(name = "username", defaultValue = "")
+
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public User firstName(String firstName) {
+    this.firstName = firstName;
+    return this;
+  }
+
+  /**
+   * Get firstName
+   * @return firstName
+  */
+  @Schema(name = "firstName", defaultValue = "")
+
+
+  public String getFirstName() {
+    return firstName;
+  }
+
+  public void setFirstName(String firstName) {
+    this.firstName = firstName;
+  }
+
+  public User lastName(String lastName) {
+    this.lastName = lastName;
+    return this;
+  }
+
+  /**
+   * Get lastName
+   * @return lastName
+  */
+  @Schema(name = "lastName", defaultValue = "")
+
+
+  public String getLastName() {
+    return lastName;
+  }
+
+  public void setLastName(String lastName) {
+    this.lastName = lastName;
+  }
+
+  public User email(String email) {
+    this.email = email;
+    return this;
+  }
+
+  /**
+   * Get email
+   * @return email
+  */
+  @Schema(name = "email", defaultValue = "")
+
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+  public User password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", defaultValue = "")
+
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public User phone(String phone) {
+    this.phone = phone;
+    return this;
+  }
+
+  /**
+   * Get phone
+   * @return phone
+  */
+  @Schema(name = "phone", defaultValue = "")
+
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public User userStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+    return this;
+  }
+
+  /**
+   * User Status
+   * @return userStatus
+  */
+  @Schema(name = "userStatus", defaultValue = "User Status")
+
+
+  public Integer getUserStatus() {
+    return userStatus;
+  }
+
+  public void setUserStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    User user = (User) o;
+    return Objects.equals(this.id, user.id) &&
+        Objects.equals(this.username, user.username) &&
+        Objects.equals(this.firstName, user.firstName) &&
+        Objects.equals(this.lastName, user.lastName) &&
+        Objects.equals(this.email, user.email) &&
+        Objects.equals(this.password, user.password) &&
+        Objects.equals(this.phone, user.phone) &&
+        Objects.equals(this.userStatus, user.userStatus);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class User {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    username: ").append(toIndentedString(username)).append("\n");
+    sb.append("    firstName: ").append(toIndentedString(firstName)).append("\n");
+    sb.append("    lastName: ").append(toIndentedString(lastName)).append("\n");
+    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    phone: ").append(toIndentedString(phone)).append("\n");
+    sb.append("    userStatus: ").append(toIndentedString(userStatus)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/XmlItem.java b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/XmlItem.java
new file mode 100644
index 0000000000000000000000000000000000000000..59a183db0f62d3228837978041ec6ba77949ce09
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/XmlItem.java
@@ -0,0 +1,872 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * XmlItem
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class XmlItem   {
+  @JsonProperty("attribute_string")
+  private String attributeString;
+
+  @JsonProperty("attribute_number")
+  private BigDecimal attributeNumber;
+
+  @JsonProperty("attribute_integer")
+  private Integer attributeInteger;
+
+  @JsonProperty("attribute_boolean")
+  private Boolean attributeBoolean;
+
+  @JsonProperty("wrapped_array")
+  @Valid
+  private List<Integer> wrappedArray = null;
+
+  @JsonProperty("name_string")
+  private String nameString;
+
+  @JsonProperty("name_number")
+  private BigDecimal nameNumber;
+
+  @JsonProperty("name_integer")
+  private Integer nameInteger;
+
+  @JsonProperty("name_boolean")
+  private Boolean nameBoolean;
+
+  @JsonProperty("name_array")
+  @Valid
+  private List<Integer> nameArray = null;
+
+  @JsonProperty("name_wrapped_array")
+  @Valid
+  private List<Integer> nameWrappedArray = null;
+
+  @JsonProperty("prefix_string")
+  private String prefixString;
+
+  @JsonProperty("prefix_number")
+  private BigDecimal prefixNumber;
+
+  @JsonProperty("prefix_integer")
+  private Integer prefixInteger;
+
+  @JsonProperty("prefix_boolean")
+  private Boolean prefixBoolean;
+
+  @JsonProperty("prefix_array")
+  @Valid
+  private List<Integer> prefixArray = null;
+
+  @JsonProperty("prefix_wrapped_array")
+  @Valid
+  private List<Integer> prefixWrappedArray = null;
+
+  @JsonProperty("namespace_string")
+  private String namespaceString;
+
+  @JsonProperty("namespace_number")
+  private BigDecimal namespaceNumber;
+
+  @JsonProperty("namespace_integer")
+  private Integer namespaceInteger;
+
+  @JsonProperty("namespace_boolean")
+  private Boolean namespaceBoolean;
+
+  @JsonProperty("namespace_array")
+  @Valid
+  private List<Integer> namespaceArray = null;
+
+  @JsonProperty("namespace_wrapped_array")
+  @Valid
+  private List<Integer> namespaceWrappedArray = null;
+
+  @JsonProperty("prefix_ns_string")
+  private String prefixNsString;
+
+  @JsonProperty("prefix_ns_number")
+  private BigDecimal prefixNsNumber;
+
+  @JsonProperty("prefix_ns_integer")
+  private Integer prefixNsInteger;
+
+  @JsonProperty("prefix_ns_boolean")
+  private Boolean prefixNsBoolean;
+
+  @JsonProperty("prefix_ns_array")
+  @Valid
+  private List<Integer> prefixNsArray = null;
+
+  @JsonProperty("prefix_ns_wrapped_array")
+  @Valid
+  private List<Integer> prefixNsWrappedArray = null;
+
+  public XmlItem attributeString(String attributeString) {
+    this.attributeString = attributeString;
+    return this;
+  }
+
+  /**
+   * Get attributeString
+   * @return attributeString
+  */
+  @Schema(name = "attributeString", example = "string", defaultValue = "")
+
+
+  public String getAttributeString() {
+    return attributeString;
+  }
+
+  public void setAttributeString(String attributeString) {
+    this.attributeString = attributeString;
+  }
+
+  public XmlItem attributeNumber(BigDecimal attributeNumber) {
+    this.attributeNumber = attributeNumber;
+    return this;
+  }
+
+  /**
+   * Get attributeNumber
+   * @return attributeNumber
+  */
+  @Schema(name = "attributeNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getAttributeNumber() {
+    return attributeNumber;
+  }
+
+  public void setAttributeNumber(BigDecimal attributeNumber) {
+    this.attributeNumber = attributeNumber;
+  }
+
+  public XmlItem attributeInteger(Integer attributeInteger) {
+    this.attributeInteger = attributeInteger;
+    return this;
+  }
+
+  /**
+   * Get attributeInteger
+   * @return attributeInteger
+  */
+  @Schema(name = "attributeInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getAttributeInteger() {
+    return attributeInteger;
+  }
+
+  public void setAttributeInteger(Integer attributeInteger) {
+    this.attributeInteger = attributeInteger;
+  }
+
+  public XmlItem attributeBoolean(Boolean attributeBoolean) {
+    this.attributeBoolean = attributeBoolean;
+    return this;
+  }
+
+  /**
+   * Get attributeBoolean
+   * @return attributeBoolean
+  */
+  @Schema(name = "attributeBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getAttributeBoolean() {
+    return attributeBoolean;
+  }
+
+  public void setAttributeBoolean(Boolean attributeBoolean) {
+    this.attributeBoolean = attributeBoolean;
+  }
+
+  public XmlItem wrappedArray(List<Integer> wrappedArray) {
+    this.wrappedArray = wrappedArray;
+    return this;
+  }
+
+  public XmlItem addWrappedArrayItem(Integer wrappedArrayItem) {
+    if (this.wrappedArray == null) {
+      this.wrappedArray = new ArrayList<>();
+    }
+    this.wrappedArray.add(wrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get wrappedArray
+   * @return wrappedArray
+  */
+  @Schema(name = "wrappedArray", defaultValue = "")
+
+
+  public List<Integer> getWrappedArray() {
+    return wrappedArray;
+  }
+
+  public void setWrappedArray(List<Integer> wrappedArray) {
+    this.wrappedArray = wrappedArray;
+  }
+
+  public XmlItem nameString(String nameString) {
+    this.nameString = nameString;
+    return this;
+  }
+
+  /**
+   * Get nameString
+   * @return nameString
+  */
+  @Schema(name = "nameString", example = "string", defaultValue = "")
+
+
+  public String getNameString() {
+    return nameString;
+  }
+
+  public void setNameString(String nameString) {
+    this.nameString = nameString;
+  }
+
+  public XmlItem nameNumber(BigDecimal nameNumber) {
+    this.nameNumber = nameNumber;
+    return this;
+  }
+
+  /**
+   * Get nameNumber
+   * @return nameNumber
+  */
+  @Schema(name = "nameNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getNameNumber() {
+    return nameNumber;
+  }
+
+  public void setNameNumber(BigDecimal nameNumber) {
+    this.nameNumber = nameNumber;
+  }
+
+  public XmlItem nameInteger(Integer nameInteger) {
+    this.nameInteger = nameInteger;
+    return this;
+  }
+
+  /**
+   * Get nameInteger
+   * @return nameInteger
+  */
+  @Schema(name = "nameInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getNameInteger() {
+    return nameInteger;
+  }
+
+  public void setNameInteger(Integer nameInteger) {
+    this.nameInteger = nameInteger;
+  }
+
+  public XmlItem nameBoolean(Boolean nameBoolean) {
+    this.nameBoolean = nameBoolean;
+    return this;
+  }
+
+  /**
+   * Get nameBoolean
+   * @return nameBoolean
+  */
+  @Schema(name = "nameBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getNameBoolean() {
+    return nameBoolean;
+  }
+
+  public void setNameBoolean(Boolean nameBoolean) {
+    this.nameBoolean = nameBoolean;
+  }
+
+  public XmlItem nameArray(List<Integer> nameArray) {
+    this.nameArray = nameArray;
+    return this;
+  }
+
+  public XmlItem addNameArrayItem(Integer nameArrayItem) {
+    if (this.nameArray == null) {
+      this.nameArray = new ArrayList<>();
+    }
+    this.nameArray.add(nameArrayItem);
+    return this;
+  }
+
+  /**
+   * Get nameArray
+   * @return nameArray
+  */
+  @Schema(name = "nameArray", defaultValue = "")
+
+
+  public List<Integer> getNameArray() {
+    return nameArray;
+  }
+
+  public void setNameArray(List<Integer> nameArray) {
+    this.nameArray = nameArray;
+  }
+
+  public XmlItem nameWrappedArray(List<Integer> nameWrappedArray) {
+    this.nameWrappedArray = nameWrappedArray;
+    return this;
+  }
+
+  public XmlItem addNameWrappedArrayItem(Integer nameWrappedArrayItem) {
+    if (this.nameWrappedArray == null) {
+      this.nameWrappedArray = new ArrayList<>();
+    }
+    this.nameWrappedArray.add(nameWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get nameWrappedArray
+   * @return nameWrappedArray
+  */
+  @Schema(name = "nameWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getNameWrappedArray() {
+    return nameWrappedArray;
+  }
+
+  public void setNameWrappedArray(List<Integer> nameWrappedArray) {
+    this.nameWrappedArray = nameWrappedArray;
+  }
+
+  public XmlItem prefixString(String prefixString) {
+    this.prefixString = prefixString;
+    return this;
+  }
+
+  /**
+   * Get prefixString
+   * @return prefixString
+  */
+  @Schema(name = "prefixString", example = "string", defaultValue = "")
+
+
+  public String getPrefixString() {
+    return prefixString;
+  }
+
+  public void setPrefixString(String prefixString) {
+    this.prefixString = prefixString;
+  }
+
+  public XmlItem prefixNumber(BigDecimal prefixNumber) {
+    this.prefixNumber = prefixNumber;
+    return this;
+  }
+
+  /**
+   * Get prefixNumber
+   * @return prefixNumber
+  */
+  @Schema(name = "prefixNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getPrefixNumber() {
+    return prefixNumber;
+  }
+
+  public void setPrefixNumber(BigDecimal prefixNumber) {
+    this.prefixNumber = prefixNumber;
+  }
+
+  public XmlItem prefixInteger(Integer prefixInteger) {
+    this.prefixInteger = prefixInteger;
+    return this;
+  }
+
+  /**
+   * Get prefixInteger
+   * @return prefixInteger
+  */
+  @Schema(name = "prefixInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getPrefixInteger() {
+    return prefixInteger;
+  }
+
+  public void setPrefixInteger(Integer prefixInteger) {
+    this.prefixInteger = prefixInteger;
+  }
+
+  public XmlItem prefixBoolean(Boolean prefixBoolean) {
+    this.prefixBoolean = prefixBoolean;
+    return this;
+  }
+
+  /**
+   * Get prefixBoolean
+   * @return prefixBoolean
+  */
+  @Schema(name = "prefixBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getPrefixBoolean() {
+    return prefixBoolean;
+  }
+
+  public void setPrefixBoolean(Boolean prefixBoolean) {
+    this.prefixBoolean = prefixBoolean;
+  }
+
+  public XmlItem prefixArray(List<Integer> prefixArray) {
+    this.prefixArray = prefixArray;
+    return this;
+  }
+
+  public XmlItem addPrefixArrayItem(Integer prefixArrayItem) {
+    if (this.prefixArray == null) {
+      this.prefixArray = new ArrayList<>();
+    }
+    this.prefixArray.add(prefixArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixArray
+   * @return prefixArray
+  */
+  @Schema(name = "prefixArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixArray() {
+    return prefixArray;
+  }
+
+  public void setPrefixArray(List<Integer> prefixArray) {
+    this.prefixArray = prefixArray;
+  }
+
+  public XmlItem prefixWrappedArray(List<Integer> prefixWrappedArray) {
+    this.prefixWrappedArray = prefixWrappedArray;
+    return this;
+  }
+
+  public XmlItem addPrefixWrappedArrayItem(Integer prefixWrappedArrayItem) {
+    if (this.prefixWrappedArray == null) {
+      this.prefixWrappedArray = new ArrayList<>();
+    }
+    this.prefixWrappedArray.add(prefixWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixWrappedArray
+   * @return prefixWrappedArray
+  */
+  @Schema(name = "prefixWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixWrappedArray() {
+    return prefixWrappedArray;
+  }
+
+  public void setPrefixWrappedArray(List<Integer> prefixWrappedArray) {
+    this.prefixWrappedArray = prefixWrappedArray;
+  }
+
+  public XmlItem namespaceString(String namespaceString) {
+    this.namespaceString = namespaceString;
+    return this;
+  }
+
+  /**
+   * Get namespaceString
+   * @return namespaceString
+  */
+  @Schema(name = "namespaceString", example = "string", defaultValue = "")
+
+
+  public String getNamespaceString() {
+    return namespaceString;
+  }
+
+  public void setNamespaceString(String namespaceString) {
+    this.namespaceString = namespaceString;
+  }
+
+  public XmlItem namespaceNumber(BigDecimal namespaceNumber) {
+    this.namespaceNumber = namespaceNumber;
+    return this;
+  }
+
+  /**
+   * Get namespaceNumber
+   * @return namespaceNumber
+  */
+  @Schema(name = "namespaceNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getNamespaceNumber() {
+    return namespaceNumber;
+  }
+
+  public void setNamespaceNumber(BigDecimal namespaceNumber) {
+    this.namespaceNumber = namespaceNumber;
+  }
+
+  public XmlItem namespaceInteger(Integer namespaceInteger) {
+    this.namespaceInteger = namespaceInteger;
+    return this;
+  }
+
+  /**
+   * Get namespaceInteger
+   * @return namespaceInteger
+  */
+  @Schema(name = "namespaceInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getNamespaceInteger() {
+    return namespaceInteger;
+  }
+
+  public void setNamespaceInteger(Integer namespaceInteger) {
+    this.namespaceInteger = namespaceInteger;
+  }
+
+  public XmlItem namespaceBoolean(Boolean namespaceBoolean) {
+    this.namespaceBoolean = namespaceBoolean;
+    return this;
+  }
+
+  /**
+   * Get namespaceBoolean
+   * @return namespaceBoolean
+  */
+  @Schema(name = "namespaceBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getNamespaceBoolean() {
+    return namespaceBoolean;
+  }
+
+  public void setNamespaceBoolean(Boolean namespaceBoolean) {
+    this.namespaceBoolean = namespaceBoolean;
+  }
+
+  public XmlItem namespaceArray(List<Integer> namespaceArray) {
+    this.namespaceArray = namespaceArray;
+    return this;
+  }
+
+  public XmlItem addNamespaceArrayItem(Integer namespaceArrayItem) {
+    if (this.namespaceArray == null) {
+      this.namespaceArray = new ArrayList<>();
+    }
+    this.namespaceArray.add(namespaceArrayItem);
+    return this;
+  }
+
+  /**
+   * Get namespaceArray
+   * @return namespaceArray
+  */
+  @Schema(name = "namespaceArray", defaultValue = "")
+
+
+  public List<Integer> getNamespaceArray() {
+    return namespaceArray;
+  }
+
+  public void setNamespaceArray(List<Integer> namespaceArray) {
+    this.namespaceArray = namespaceArray;
+  }
+
+  public XmlItem namespaceWrappedArray(List<Integer> namespaceWrappedArray) {
+    this.namespaceWrappedArray = namespaceWrappedArray;
+    return this;
+  }
+
+  public XmlItem addNamespaceWrappedArrayItem(Integer namespaceWrappedArrayItem) {
+    if (this.namespaceWrappedArray == null) {
+      this.namespaceWrappedArray = new ArrayList<>();
+    }
+    this.namespaceWrappedArray.add(namespaceWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get namespaceWrappedArray
+   * @return namespaceWrappedArray
+  */
+  @Schema(name = "namespaceWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getNamespaceWrappedArray() {
+    return namespaceWrappedArray;
+  }
+
+  public void setNamespaceWrappedArray(List<Integer> namespaceWrappedArray) {
+    this.namespaceWrappedArray = namespaceWrappedArray;
+  }
+
+  public XmlItem prefixNsString(String prefixNsString) {
+    this.prefixNsString = prefixNsString;
+    return this;
+  }
+
+  /**
+   * Get prefixNsString
+   * @return prefixNsString
+  */
+  @Schema(name = "prefixNsString", example = "string", defaultValue = "")
+
+
+  public String getPrefixNsString() {
+    return prefixNsString;
+  }
+
+  public void setPrefixNsString(String prefixNsString) {
+    this.prefixNsString = prefixNsString;
+  }
+
+  public XmlItem prefixNsNumber(BigDecimal prefixNsNumber) {
+    this.prefixNsNumber = prefixNsNumber;
+    return this;
+  }
+
+  /**
+   * Get prefixNsNumber
+   * @return prefixNsNumber
+  */
+  @Schema(name = "prefixNsNumber", example = "1.234", defaultValue = "")
+
+  @Valid
+
+  public BigDecimal getPrefixNsNumber() {
+    return prefixNsNumber;
+  }
+
+  public void setPrefixNsNumber(BigDecimal prefixNsNumber) {
+    this.prefixNsNumber = prefixNsNumber;
+  }
+
+  public XmlItem prefixNsInteger(Integer prefixNsInteger) {
+    this.prefixNsInteger = prefixNsInteger;
+    return this;
+  }
+
+  /**
+   * Get prefixNsInteger
+   * @return prefixNsInteger
+  */
+  @Schema(name = "prefixNsInteger", example = "-2", defaultValue = "")
+
+
+  public Integer getPrefixNsInteger() {
+    return prefixNsInteger;
+  }
+
+  public void setPrefixNsInteger(Integer prefixNsInteger) {
+    this.prefixNsInteger = prefixNsInteger;
+  }
+
+  public XmlItem prefixNsBoolean(Boolean prefixNsBoolean) {
+    this.prefixNsBoolean = prefixNsBoolean;
+    return this;
+  }
+
+  /**
+   * Get prefixNsBoolean
+   * @return prefixNsBoolean
+  */
+  @Schema(name = "prefixNsBoolean", example = "true", defaultValue = "")
+
+
+  public Boolean getPrefixNsBoolean() {
+    return prefixNsBoolean;
+  }
+
+  public void setPrefixNsBoolean(Boolean prefixNsBoolean) {
+    this.prefixNsBoolean = prefixNsBoolean;
+  }
+
+  public XmlItem prefixNsArray(List<Integer> prefixNsArray) {
+    this.prefixNsArray = prefixNsArray;
+    return this;
+  }
+
+  public XmlItem addPrefixNsArrayItem(Integer prefixNsArrayItem) {
+    if (this.prefixNsArray == null) {
+      this.prefixNsArray = new ArrayList<>();
+    }
+    this.prefixNsArray.add(prefixNsArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixNsArray
+   * @return prefixNsArray
+  */
+  @Schema(name = "prefixNsArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixNsArray() {
+    return prefixNsArray;
+  }
+
+  public void setPrefixNsArray(List<Integer> prefixNsArray) {
+    this.prefixNsArray = prefixNsArray;
+  }
+
+  public XmlItem prefixNsWrappedArray(List<Integer> prefixNsWrappedArray) {
+    this.prefixNsWrappedArray = prefixNsWrappedArray;
+    return this;
+  }
+
+  public XmlItem addPrefixNsWrappedArrayItem(Integer prefixNsWrappedArrayItem) {
+    if (this.prefixNsWrappedArray == null) {
+      this.prefixNsWrappedArray = new ArrayList<>();
+    }
+    this.prefixNsWrappedArray.add(prefixNsWrappedArrayItem);
+    return this;
+  }
+
+  /**
+   * Get prefixNsWrappedArray
+   * @return prefixNsWrappedArray
+  */
+  @Schema(name = "prefixNsWrappedArray", defaultValue = "")
+
+
+  public List<Integer> getPrefixNsWrappedArray() {
+    return prefixNsWrappedArray;
+  }
+
+  public void setPrefixNsWrappedArray(List<Integer> prefixNsWrappedArray) {
+    this.prefixNsWrappedArray = prefixNsWrappedArray;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    XmlItem xmlItem = (XmlItem) o;
+    return Objects.equals(this.attributeString, xmlItem.attributeString) &&
+        Objects.equals(this.attributeNumber, xmlItem.attributeNumber) &&
+        Objects.equals(this.attributeInteger, xmlItem.attributeInteger) &&
+        Objects.equals(this.attributeBoolean, xmlItem.attributeBoolean) &&
+        Objects.equals(this.wrappedArray, xmlItem.wrappedArray) &&
+        Objects.equals(this.nameString, xmlItem.nameString) &&
+        Objects.equals(this.nameNumber, xmlItem.nameNumber) &&
+        Objects.equals(this.nameInteger, xmlItem.nameInteger) &&
+        Objects.equals(this.nameBoolean, xmlItem.nameBoolean) &&
+        Objects.equals(this.nameArray, xmlItem.nameArray) &&
+        Objects.equals(this.nameWrappedArray, xmlItem.nameWrappedArray) &&
+        Objects.equals(this.prefixString, xmlItem.prefixString) &&
+        Objects.equals(this.prefixNumber, xmlItem.prefixNumber) &&
+        Objects.equals(this.prefixInteger, xmlItem.prefixInteger) &&
+        Objects.equals(this.prefixBoolean, xmlItem.prefixBoolean) &&
+        Objects.equals(this.prefixArray, xmlItem.prefixArray) &&
+        Objects.equals(this.prefixWrappedArray, xmlItem.prefixWrappedArray) &&
+        Objects.equals(this.namespaceString, xmlItem.namespaceString) &&
+        Objects.equals(this.namespaceNumber, xmlItem.namespaceNumber) &&
+        Objects.equals(this.namespaceInteger, xmlItem.namespaceInteger) &&
+        Objects.equals(this.namespaceBoolean, xmlItem.namespaceBoolean) &&
+        Objects.equals(this.namespaceArray, xmlItem.namespaceArray) &&
+        Objects.equals(this.namespaceWrappedArray, xmlItem.namespaceWrappedArray) &&
+        Objects.equals(this.prefixNsString, xmlItem.prefixNsString) &&
+        Objects.equals(this.prefixNsNumber, xmlItem.prefixNsNumber) &&
+        Objects.equals(this.prefixNsInteger, xmlItem.prefixNsInteger) &&
+        Objects.equals(this.prefixNsBoolean, xmlItem.prefixNsBoolean) &&
+        Objects.equals(this.prefixNsArray, xmlItem.prefixNsArray) &&
+        Objects.equals(this.prefixNsWrappedArray, xmlItem.prefixNsWrappedArray);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(attributeString, attributeNumber, attributeInteger, attributeBoolean, wrappedArray, nameString, nameNumber, nameInteger, nameBoolean, nameArray, nameWrappedArray, prefixString, prefixNumber, prefixInteger, prefixBoolean, prefixArray, prefixWrappedArray, namespaceString, namespaceNumber, namespaceInteger, namespaceBoolean, namespaceArray, namespaceWrappedArray, prefixNsString, prefixNsNumber, prefixNsInteger, prefixNsBoolean, prefixNsArray, prefixNsWrappedArray);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class XmlItem {\n");
+    
+    sb.append("    attributeString: ").append(toIndentedString(attributeString)).append("\n");
+    sb.append("    attributeNumber: ").append(toIndentedString(attributeNumber)).append("\n");
+    sb.append("    attributeInteger: ").append(toIndentedString(attributeInteger)).append("\n");
+    sb.append("    attributeBoolean: ").append(toIndentedString(attributeBoolean)).append("\n");
+    sb.append("    wrappedArray: ").append(toIndentedString(wrappedArray)).append("\n");
+    sb.append("    nameString: ").append(toIndentedString(nameString)).append("\n");
+    sb.append("    nameNumber: ").append(toIndentedString(nameNumber)).append("\n");
+    sb.append("    nameInteger: ").append(toIndentedString(nameInteger)).append("\n");
+    sb.append("    nameBoolean: ").append(toIndentedString(nameBoolean)).append("\n");
+    sb.append("    nameArray: ").append(toIndentedString(nameArray)).append("\n");
+    sb.append("    nameWrappedArray: ").append(toIndentedString(nameWrappedArray)).append("\n");
+    sb.append("    prefixString: ").append(toIndentedString(prefixString)).append("\n");
+    sb.append("    prefixNumber: ").append(toIndentedString(prefixNumber)).append("\n");
+    sb.append("    prefixInteger: ").append(toIndentedString(prefixInteger)).append("\n");
+    sb.append("    prefixBoolean: ").append(toIndentedString(prefixBoolean)).append("\n");
+    sb.append("    prefixArray: ").append(toIndentedString(prefixArray)).append("\n");
+    sb.append("    prefixWrappedArray: ").append(toIndentedString(prefixWrappedArray)).append("\n");
+    sb.append("    namespaceString: ").append(toIndentedString(namespaceString)).append("\n");
+    sb.append("    namespaceNumber: ").append(toIndentedString(namespaceNumber)).append("\n");
+    sb.append("    namespaceInteger: ").append(toIndentedString(namespaceInteger)).append("\n");
+    sb.append("    namespaceBoolean: ").append(toIndentedString(namespaceBoolean)).append("\n");
+    sb.append("    namespaceArray: ").append(toIndentedString(namespaceArray)).append("\n");
+    sb.append("    namespaceWrappedArray: ").append(toIndentedString(namespaceWrappedArray)).append("\n");
+    sb.append("    prefixNsString: ").append(toIndentedString(prefixNsString)).append("\n");
+    sb.append("    prefixNsNumber: ").append(toIndentedString(prefixNsNumber)).append("\n");
+    sb.append("    prefixNsInteger: ").append(toIndentedString(prefixNsInteger)).append("\n");
+    sb.append("    prefixNsBoolean: ").append(toIndentedString(prefixNsBoolean)).append("\n");
+    sb.append("    prefixNsArray: ").append(toIndentedString(prefixNsArray)).append("\n");
+    sb.append("    prefixNsWrappedArray: ").append(toIndentedString(prefixNsWrappedArray)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/resources/application.properties b/samples/openapi3/server/petstore/springboot-useoptional/src/main/resources/application.properties
new file mode 100644
index 0000000000000000000000000000000000000000..9d06609db665e4097670b78b2c2adb4876cfc81f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/resources/application.properties
@@ -0,0 +1,3 @@
+server.port=80
+spring.jackson.date-format=org.openapitools.RFC3339DateFormat
+spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
diff --git a/samples/openapi3/server/petstore/springboot-useoptional/src/main/resources/openapi.yaml b/samples/openapi3/server/petstore/springboot-useoptional/src/main/resources/openapi.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d6386dc39bf4ff458f7db1f6e23a6e1e22b7e8c6
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot-useoptional/src/main/resources/openapi.yaml
@@ -0,0 +1,2264 @@
+openapi: 3.0.1
+info:
+  description: 'This spec is mainly for testing Petstore server and contains fake
+    endpoints, models. Please do not use this for any other purpose. Special characters:
+    " \'
+  license:
+    name: Apache-2.0
+    url: https://www.apache.org/licenses/LICENSE-2.0.html
+  title: OpenAPI Petstore
+  version: 1.0.0
+servers:
+- url: http://petstore.swagger.io:80/v2
+tags:
+- description: Everything about your Pets
+  name: pet
+- description: Access to Petstore orders
+  name: store
+- description: Operations about user
+  name: user
+paths:
+  /pet:
+    post:
+      operationId: addPet
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Pet'
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/Pet'
+        description: Pet object that needs to be added to the store
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "405":
+          content: {}
+          description: Invalid input
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Add a new pet to the store
+      tags:
+      - pet
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    put:
+      operationId: updatePet
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Pet'
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/Pet'
+        description: Pet object that needs to be added to the store
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Pet not found
+        "405":
+          content: {}
+          description: Validation exception
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Update an existing pet
+      tags:
+      - pet
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/findByStatus:
+    get:
+      description: Multiple status values can be provided with comma separated strings
+      operationId: findPetsByStatus
+      parameters:
+      - description: Status values that need to be considered for filter
+        explode: false
+        in: query
+        name: status
+        required: true
+        schema:
+          items:
+            default: available
+            enum:
+            - available
+            - pending
+            - sold
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid status value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Finds Pets by status
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/findByTags:
+    get:
+      deprecated: true
+      description: Multiple tags can be provided with comma separated strings. Use
+        tag1, tag2, tag3 for testing.
+      operationId: findPetsByTags
+      parameters:
+      - description: Tags to filter by
+        explode: false
+        in: query
+        name: tags
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+          uniqueItems: true
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+                uniqueItems: true
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+                uniqueItems: true
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid tag value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Finds Pets by tags
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/{petId}:
+    delete:
+      operationId: deletePet
+      parameters:
+      - in: header
+        name: api_key
+        schema:
+          type: string
+      - description: Pet id to delete
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid pet value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Deletes a pet
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    get:
+      description: Returns a single pet
+      operationId: getPetById
+      parameters:
+      - description: ID of pet to return
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Pet'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Pet'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Pet not found
+      security:
+      - api_key: []
+      summary: Find pet by ID
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    post:
+      operationId: updatePetWithForm
+      parameters:
+      - description: ID of pet that needs to be updated
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                name:
+                  description: Updated name of the pet
+                  type: string
+                status:
+                  description: Updated status of the pet
+                  type: string
+      responses:
+        "405":
+          content: {}
+          description: Invalid input
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Updates a pet in the store with form data
+      tags:
+      - pet
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/{petId}/uploadImage:
+    post:
+      operationId: uploadFile
+      parameters:
+      - description: ID of pet to update
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                additionalMetadata:
+                  description: Additional data to pass to server
+                  type: string
+                file:
+                  description: file to upload
+                  format: binary
+                  type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiResponse'
+          description: successful operation
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: uploads an image
+      tags:
+      - pet
+      x-contentType: multipart/form-data
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /store/inventory:
+    get:
+      description: Returns a map of status codes to quantities
+      operationId: getInventory
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                additionalProperties:
+                  format: int32
+                  type: integer
+                type: object
+          description: successful operation
+      security:
+      - api_key: []
+      summary: Returns pet inventories by status
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /store/order:
+    post:
+      operationId: placeOrder
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/Order'
+        description: order placed for purchasing the pet
+        required: true
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Order'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Order'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid Order
+      summary: Place an order for a pet
+      tags:
+      - store
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /store/order/{order_id}:
+    delete:
+      description: For valid response try integer IDs with value < 1000. Anything
+        above 1000 or nonintegers will generate API errors
+      operationId: deleteOrder
+      parameters:
+      - description: ID of the order that needs to be deleted
+        in: path
+        name: order_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Order not found
+      summary: Delete purchase order by ID
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+    get:
+      description: For valid response try integer IDs with value <= 5 or > 10. Other
+        values will generated exceptions
+      operationId: getOrderById
+      parameters:
+      - description: ID of pet that needs to be fetched
+        in: path
+        name: order_id
+        required: true
+        schema:
+          format: int64
+          maximum: 5
+          minimum: 1
+          type: integer
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Order'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Order'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid ID supplied
+        "404":
+          content: {}
+          description: Order not found
+      summary: Find purchase order by ID
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /user:
+    post:
+      description: This can only be done by the logged in user.
+      operationId: createUser
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/User'
+        description: Created user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Create user
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/createWithArray:
+    post:
+      operationId: createUsersWithArrayInput
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                $ref: '#/components/schemas/User'
+              type: array
+        description: List of user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Creates list of users with given input array
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/createWithList:
+    post:
+      operationId: createUsersWithListInput
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                $ref: '#/components/schemas/User'
+              type: array
+        description: List of user object
+        required: true
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Creates list of users with given input array
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/login:
+    get:
+      operationId: loginUser
+      parameters:
+      - description: The user name for login
+        in: query
+        name: username
+        required: true
+        schema:
+          type: string
+      - description: The password for login in clear text
+        in: query
+        name: password
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                type: string
+            application/json:
+              schema:
+                type: string
+          description: successful operation
+          headers:
+            X-Rate-Limit:
+              description: calls per hour allowed by the user
+              schema:
+                format: int32
+                type: integer
+            X-Expires-After:
+              description: date in UTC when token expires
+              schema:
+                format: date-time
+                type: string
+        "400":
+          content: {}
+          description: Invalid username/password supplied
+      summary: Logs user into the system
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/logout:
+    get:
+      operationId: logoutUser
+      responses:
+        default:
+          content: {}
+          description: successful operation
+      summary: Logs out current logged in user session
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/{username}:
+    delete:
+      description: This can only be done by the logged in user.
+      operationId: deleteUser
+      parameters:
+      - description: The name that needs to be deleted
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Delete user
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+    get:
+      operationId: getUserByName
+      parameters:
+      - description: The name that needs to be fetched. Use user1 for testing.
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/User'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/User'
+          description: successful operation
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Get user by user name
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+    put:
+      description: This can only be done by the logged in user.
+      operationId: updateUser
+      parameters:
+      - description: name that need to be deleted
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/User'
+        description: Updated user object
+        required: true
+      responses:
+        "400":
+          content: {}
+          description: Invalid user supplied
+        "404":
+          content: {}
+          description: User not found
+      summary: Updated user
+      tags:
+      - user
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /fake_classname_test:
+    patch:
+      description: To test class name in snake case
+      operationId: testClassname
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      security:
+      - api_key_query: []
+      summary: To test class name in snake case
+      tags:
+      - fake_classname_tags 123#$%^
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake_classname_tags 123#$%^
+  /fake:
+    delete:
+      description: Fake endpoint to test group parameters (optional)
+      operationId: testGroupParameters
+      parameters:
+      - description: Required String in group parameters
+        in: query
+        name: required_string_group
+        required: true
+        schema:
+          type: integer
+      - description: Required Boolean in group parameters
+        in: header
+        name: required_boolean_group
+        required: true
+        schema:
+          type: boolean
+      - description: Required Integer in group parameters
+        in: query
+        name: required_int64_group
+        required: true
+        schema:
+          format: int64
+          type: integer
+      - description: String in group parameters
+        in: query
+        name: string_group
+        schema:
+          type: integer
+      - description: Boolean in group parameters
+        in: header
+        name: boolean_group
+        schema:
+          type: boolean
+      - description: Integer in group parameters
+        in: query
+        name: int64_group
+        schema:
+          format: int64
+          type: integer
+      responses:
+        "400":
+          content: {}
+          description: Someting wrong
+      summary: Fake endpoint to test group parameters (optional)
+      tags:
+      - fake
+      x-group-parameters: true
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    get:
+      description: To test enum parameters
+      operationId: testEnumParameters
+      parameters:
+      - description: Header parameter enum test (string array)
+        explode: false
+        in: header
+        name: enum_header_string_array
+        schema:
+          items:
+            default: $
+            enum:
+            - '>'
+            - $
+            type: string
+          type: array
+        style: simple
+      - description: Header parameter enum test (string)
+        in: header
+        name: enum_header_string
+        schema:
+          default: -efg
+          enum:
+          - _abc
+          - -efg
+          - (xyz)
+          type: string
+      - description: Query parameter enum test (string array)
+        explode: false
+        in: query
+        name: enum_query_string_array
+        schema:
+          items:
+            default: $
+            enum:
+            - '>'
+            - $
+            type: string
+          type: array
+        style: form
+      - description: Query parameter enum test (string)
+        in: query
+        name: enum_query_string
+        schema:
+          default: -efg
+          enum:
+          - _abc
+          - -efg
+          - (xyz)
+          type: string
+      - description: Query parameter enum test (double)
+        in: query
+        name: enum_query_integer
+        schema:
+          enum:
+          - 1
+          - -2
+          format: int32
+          type: integer
+      - description: Query parameter enum test (double)
+        in: query
+        name: enum_query_double
+        schema:
+          enum:
+          - 1.1
+          - -1.2
+          format: double
+          type: number
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                enum_form_string_array:
+                  description: Form parameter enum test (string array)
+                  items:
+                    default: $
+                    enum:
+                    - '>'
+                    - $
+                    type: string
+                  type: array
+                enum_form_string:
+                  default: -efg
+                  description: Form parameter enum test (string)
+                  enum:
+                  - _abc
+                  - -efg
+                  - (xyz)
+                  type: string
+      responses:
+        "400":
+          content: {}
+          description: Invalid request
+        "404":
+          content: {}
+          description: Not found
+      summary: To test enum parameters
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    patch:
+      description: To test "client" model
+      operationId: testClientModel
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      summary: To test "client" model
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+    post:
+      description: |-
+        Fake endpoint for testing various parameters
+         假端點
+         偽のエンドポイント
+         가짜 엔드 포인트
+      operationId: testEndpointParameters
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                integer:
+                  description: None
+                  format: int32
+                  maximum: 100
+                  minimum: 10
+                  type: integer
+                int32:
+                  description: None
+                  format: int32
+                  maximum: 200
+                  minimum: 20
+                  type: integer
+                int64:
+                  description: None
+                  format: int64
+                  type: integer
+                number:
+                  description: None
+                  maximum: 543.2
+                  minimum: 32.1
+                  type: number
+                float:
+                  description: None
+                  format: float
+                  maximum: 987.6
+                  type: number
+                double:
+                  description: None
+                  format: double
+                  maximum: 123.4
+                  minimum: 67.8
+                  type: number
+                string:
+                  description: None
+                  pattern: /[a-z]/i
+                  type: string
+                pattern_without_delimiter:
+                  description: None
+                  pattern: ^[A-Z].*
+                  type: string
+                byte:
+                  description: None
+                  format: byte
+                  type: string
+                binary:
+                  description: None
+                  format: binary
+                  type: string
+                date:
+                  description: None
+                  format: date
+                  type: string
+                dateTime:
+                  description: None
+                  format: date-time
+                  type: string
+                password:
+                  description: None
+                  format: password
+                  maxLength: 64
+                  minLength: 10
+                  type: string
+                callback:
+                  description: None
+                  type: string
+              required:
+              - byte
+              - double
+              - number
+              - pattern_without_delimiter
+        required: true
+      responses:
+        "400":
+          content: {}
+          description: Invalid username supplied
+        "404":
+          content: {}
+          description: User not found
+      security:
+      - http_basic_test: []
+      summary: |-
+        Fake endpoint for testing various parameters
+         假端點
+         偽のエンドポイント
+         가짜 엔드 포인트
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/outer/number:
+    post:
+      description: Test serialization of outer number types
+      operationId: fakeOuterNumberSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterNumber'
+        description: Input number as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterNumber'
+          description: Output number
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/string:
+    post:
+      description: Test serialization of outer string types
+      operationId: fakeOuterStringSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterString'
+        description: Input string as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterString'
+          description: Output string
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/boolean:
+    post:
+      description: Test serialization of outer boolean types
+      operationId: fakeOuterBooleanSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterBoolean'
+        description: Input boolean as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterBoolean'
+          description: Output boolean
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/outer/composite:
+    post:
+      description: Test serialization of object with outer number type
+      operationId: fakeOuterCompositeSerialize
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OuterComposite'
+        description: Input composite as post body
+        required: false
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OuterComposite'
+          description: Output composite
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: '*/*'
+      x-accepts: '*/*'
+      x-tags:
+      - tag: fake
+  /fake/jsonFormData:
+    get:
+      operationId: testJsonFormData
+      requestBody:
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                param:
+                  description: field1
+                  type: string
+                param2:
+                  description: field2
+                  type: string
+              required:
+              - param
+              - param2
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: test json serialization of form data
+      tags:
+      - fake
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/inline-additionalProperties:
+    post:
+      operationId: testInlineAdditionalProperties
+      requestBody:
+        content:
+          application/json:
+            schema:
+              additionalProperties:
+                type: string
+              type: object
+        description: request body
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: test inline additionalProperties
+      tags:
+      - fake
+      x-codegen-request-body-name: param
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/body-with-query-params:
+    put:
+      operationId: testBodyWithQueryParams
+      parameters:
+      - in: query
+        name: query
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/User'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/create_xml_item:
+    post:
+      description: this route creates an XmlItem
+      operationId: createXmlItem
+      requestBody:
+        content:
+          application/xml:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          application/xml; charset=utf-8:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          application/xml; charset=utf-16:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml; charset=utf-8:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+          text/xml; charset=utf-16:
+            schema:
+              $ref: '#/components/schemas/XmlItem'
+        description: XmlItem Body
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: successful operation
+      summary: creates an XmlItem
+      tags:
+      - fake
+      x-codegen-request-body-name: XmlItem
+      x-contentType: application/xml
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /another-fake/dummy:
+    patch:
+      description: To test special tags and operation ID starting with number
+      operationId: 123_test_@#$%_special_tags
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Client'
+        description: client model
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Client'
+          description: successful operation
+      summary: To test special tags
+      tags:
+      - $another-fake?
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: $another-fake?
+  /fake/body-with-file-schema:
+    put:
+      description: For this test, the body for this request much reference a schema
+        named `File`.
+      operationId: testBodyWithFileSchema
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/FileSchemaTestClass'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-codegen-request-body-name: body
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/test-query-parameters:
+    put:
+      description: To test the collection format in query parameters
+      operationId: testQueryParameterCollectionFormat
+      parameters:
+      - explode: false
+        in: query
+        name: pipe
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - in: query
+        name: ioutil
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+      - in: query
+        name: http
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: spaceDelimited
+      - explode: false
+        in: query
+        name: url
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - explode: true
+        in: query
+        name: context
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: Success
+      tags:
+      - fake
+      x-accepts: application/json
+      x-tags:
+      - tag: fake
+  /fake/{petId}/uploadImageWithRequiredFile:
+    post:
+      operationId: uploadFileWithRequiredFile
+      parameters:
+      - description: ID of pet to update
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                additionalMetadata:
+                  description: Additional data to pass to server
+                  type: string
+                requiredFile:
+                  description: file to upload
+                  format: binary
+                  type: string
+              required:
+              - requiredFile
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiResponse'
+          description: successful operation
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: uploads an image (required)
+      tags:
+      - pet
+      x-contentType: multipart/form-data
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+components:
+  schemas:
+    Order:
+      example:
+        petId: 6
+        quantity: 1
+        id: 0
+        shipDate: 2000-01-23T04:56:07.000+00:00
+        complete: false
+        status: placed
+      properties:
+        id:
+          format: int64
+          type: integer
+        petId:
+          format: int64
+          type: integer
+        quantity:
+          format: int32
+          type: integer
+        shipDate:
+          format: date-time
+          type: string
+        status:
+          description: Order Status
+          enum:
+          - placed
+          - approved
+          - delivered
+          type: string
+        complete:
+          default: false
+          type: boolean
+      type: object
+      xml:
+        name: Order
+    Category:
+      example:
+        name: default-name
+        id: 6
+      properties:
+        id:
+          format: int64
+          type: integer
+        name:
+          default: default-name
+          type: string
+      required:
+      - name
+      type: object
+      xml:
+        name: Category
+    User:
+      example:
+        firstName: firstName
+        lastName: lastName
+        password: password
+        userStatus: 6
+        phone: phone
+        id: 0
+        email: email
+        username: username
+      properties:
+        id:
+          format: int64
+          type: integer
+          x-is-unique: true
+        username:
+          type: string
+        firstName:
+          type: string
+        lastName:
+          type: string
+        email:
+          type: string
+        password:
+          type: string
+        phone:
+          type: string
+        userStatus:
+          description: User Status
+          format: int32
+          type: integer
+      type: object
+      xml:
+        name: User
+    Tag:
+      example:
+        name: name
+        id: 1
+      properties:
+        id:
+          format: int64
+          type: integer
+        name:
+          type: string
+      type: object
+      xml:
+        name: Tag
+    Pet:
+      example:
+        photoUrls:
+        - photoUrls
+        - photoUrls
+        name: doggie
+        id: 0
+        category:
+          name: default-name
+          id: 6
+        tags:
+        - name: name
+          id: 1
+        - name: name
+          id: 1
+        status: available
+      properties:
+        id:
+          format: int64
+          type: integer
+          x-is-unique: true
+        category:
+          $ref: '#/components/schemas/Category'
+        name:
+          example: doggie
+          type: string
+        photoUrls:
+          items:
+            type: string
+          type: array
+          uniqueItems: true
+          xml:
+            name: photoUrl
+            wrapped: true
+        tags:
+          items:
+            $ref: '#/components/schemas/Tag'
+          type: array
+          xml:
+            name: tag
+            wrapped: true
+        status:
+          description: pet status in the store
+          enum:
+          - available
+          - pending
+          - sold
+          type: string
+      required:
+      - name
+      - photoUrls
+      type: object
+      xml:
+        name: Pet
+    ApiResponse:
+      example:
+        code: 0
+        type: type
+        message: message
+      properties:
+        code:
+          format: int32
+          type: integer
+        type:
+          type: string
+        message:
+          type: string
+      type: object
+    $special[model.name]:
+      properties:
+        $special[property.name]:
+          format: int64
+          type: integer
+      type: object
+      xml:
+        name: $special[model.name]
+    Return:
+      description: Model for testing reserved words
+      properties:
+        return:
+          format: int32
+          type: integer
+      type: object
+      xml:
+        name: Return
+    Name:
+      description: Model for testing model name same as property name
+      properties:
+        name:
+          format: int32
+          type: integer
+        snake_case:
+          format: int32
+          readOnly: true
+          type: integer
+        property:
+          type: string
+        "123Number":
+          readOnly: true
+          type: integer
+      required:
+      - name
+      type: object
+      xml:
+        name: Name
+    "200_response":
+      description: Model for testing model name starting with number
+      properties:
+        name:
+          format: int32
+          type: integer
+        class:
+          type: string
+      type: object
+      xml:
+        name: Name
+    ClassModel:
+      description: Model for testing model with "_class" property
+      properties:
+        _class:
+          type: string
+      type: object
+    Dog:
+      allOf:
+      - $ref: '#/components/schemas/Animal'
+      - $ref: '#/components/schemas/Dog_allOf'
+    Cat:
+      allOf:
+      - $ref: '#/components/schemas/Animal'
+      - $ref: '#/components/schemas/Cat_allOf'
+    BigCat:
+      allOf:
+      - $ref: '#/components/schemas/Cat'
+      - $ref: '#/components/schemas/BigCat_allOf'
+    Animal:
+      discriminator:
+        propertyName: className
+      properties:
+        className:
+          type: string
+        color:
+          default: red
+          type: string
+      required:
+      - className
+      type: object
+    AnimalFarm:
+      items:
+        $ref: '#/components/schemas/Animal'
+      type: array
+    format_test:
+      properties:
+        integer:
+          maximum: 1E+2
+          minimum: 1E+1
+          type: integer
+        int32:
+          format: int32
+          maximum: 2E+2
+          minimum: 2E+1
+          type: integer
+        int64:
+          format: int64
+          type: integer
+        number:
+          maximum: 543.2
+          minimum: 32.1
+          type: number
+        float:
+          format: float
+          maximum: 987.6
+          minimum: 54.3
+          type: number
+        double:
+          format: double
+          maximum: 123.4
+          minimum: 67.8
+          type: number
+        string:
+          pattern: /[a-z]/i
+          type: string
+        byte:
+          format: byte
+          pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
+          type: string
+        binary:
+          format: binary
+          type: string
+        date:
+          format: date
+          type: string
+        dateTime:
+          format: date-time
+          type: string
+        uuid:
+          example: 72f98069-206d-4f12-9f12-3d1e525a8e84
+          format: uuid
+          type: string
+        password:
+          format: password
+          maxLength: 64
+          minLength: 10
+          type: string
+        BigDecimal:
+          format: number
+          type: string
+      required:
+      - byte
+      - date
+      - number
+      - password
+      type: object
+    EnumClass:
+      default: -efg
+      enum:
+      - _abc
+      - -efg
+      - (xyz)
+      type: string
+    Enum_Test:
+      properties:
+        enum_string:
+          enum:
+          - UPPER
+          - lower
+          - ""
+          type: string
+        enum_string_required:
+          enum:
+          - UPPER
+          - lower
+          - ""
+          type: string
+        enum_integer:
+          enum:
+          - 1
+          - -1
+          format: int32
+          type: integer
+        enum_number:
+          enum:
+          - 1.1
+          - -1.2
+          format: double
+          type: number
+        outerEnum:
+          $ref: '#/components/schemas/OuterEnum'
+      required:
+      - enum_string_required
+      type: object
+    AdditionalPropertiesClass:
+      properties:
+        map_string:
+          additionalProperties:
+            type: string
+          type: object
+        map_number:
+          additionalProperties:
+            type: number
+          type: object
+        map_integer:
+          additionalProperties:
+            type: integer
+          type: object
+        map_boolean:
+          additionalProperties:
+            type: boolean
+          type: object
+        map_array_integer:
+          additionalProperties:
+            items:
+              type: integer
+            type: array
+          type: object
+        map_array_anytype:
+          additionalProperties:
+            items:
+              properties: {}
+              type: object
+            type: array
+          type: object
+        map_map_string:
+          additionalProperties:
+            additionalProperties:
+              type: string
+            type: object
+          type: object
+        map_map_anytype:
+          additionalProperties:
+            additionalProperties:
+              properties: {}
+              type: object
+            type: object
+          type: object
+        anytype_1:
+          properties: {}
+          type: object
+        anytype_2:
+          type: object
+        anytype_3:
+          properties: {}
+          type: object
+      type: object
+    AdditionalPropertiesString:
+      additionalProperties:
+        type: string
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesInteger:
+      additionalProperties:
+        type: integer
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesNumber:
+      additionalProperties:
+        type: number
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesBoolean:
+      additionalProperties:
+        type: boolean
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesArray:
+      additionalProperties:
+        items:
+          properties: {}
+          type: object
+        type: array
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesObject:
+      additionalProperties:
+        additionalProperties:
+          properties: {}
+          type: object
+        type: object
+      properties:
+        name:
+          type: string
+      type: object
+    AdditionalPropertiesAnyType:
+      additionalProperties:
+        properties: {}
+        type: object
+      properties:
+        name:
+          type: string
+      type: object
+    MixedPropertiesAndAdditionalPropertiesClass:
+      properties:
+        uuid:
+          format: uuid
+          type: string
+        dateTime:
+          format: date-time
+          type: string
+        map:
+          additionalProperties:
+            $ref: '#/components/schemas/Animal'
+          type: object
+      type: object
+    List:
+      properties:
+        "123-list":
+          type: string
+      type: object
+    Client:
+      example:
+        client: client
+      properties:
+        client:
+          type: string
+      type: object
+    ReadOnlyFirst:
+      properties:
+        bar:
+          readOnly: true
+          type: string
+        baz:
+          type: string
+      type: object
+    hasOnlyReadOnly:
+      properties:
+        bar:
+          readOnly: true
+          type: string
+        foo:
+          readOnly: true
+          type: string
+      type: object
+    Capitalization:
+      properties:
+        smallCamel:
+          type: string
+        CapitalCamel:
+          type: string
+        small_Snake:
+          type: string
+        Capital_Snake:
+          type: string
+        SCA_ETH_Flow_Points:
+          type: string
+        ATT_NAME:
+          description: |
+            Name of the pet
+          type: string
+      type: object
+    MapTest:
+      properties:
+        map_map_of_string:
+          additionalProperties:
+            additionalProperties:
+              type: string
+            type: object
+          type: object
+        map_of_enum_string:
+          additionalProperties:
+            enum:
+            - UPPER
+            - lower
+            type: string
+          type: object
+        direct_map:
+          additionalProperties:
+            type: boolean
+          type: object
+        indirect_map:
+          additionalProperties:
+            type: boolean
+          type: object
+      type: object
+    ArrayTest:
+      properties:
+        array_of_string:
+          items:
+            type: string
+          type: array
+        array_array_of_integer:
+          items:
+            items:
+              format: int64
+              type: integer
+            type: array
+          type: array
+        array_array_of_model:
+          items:
+            items:
+              $ref: '#/components/schemas/ReadOnlyFirst'
+            type: array
+          type: array
+      type: object
+    NumberOnly:
+      properties:
+        JustNumber:
+          type: number
+      type: object
+    ArrayOfNumberOnly:
+      properties:
+        ArrayNumber:
+          items:
+            type: number
+          type: array
+      type: object
+    ArrayOfArrayOfNumberOnly:
+      properties:
+        ArrayArrayNumber:
+          items:
+            items:
+              type: number
+            type: array
+          type: array
+      type: object
+    EnumArrays:
+      properties:
+        just_symbol:
+          enum:
+          - '>='
+          - $
+          type: string
+        array_enum:
+          items:
+            enum:
+            - fish
+            - crab
+            type: string
+          type: array
+      type: object
+    OuterEnum:
+      enum:
+      - placed
+      - approved
+      - delivered
+      type: string
+    OuterComposite:
+      example:
+        my_string: my_string
+        my_number: 0.8008281904610115
+        my_boolean: true
+      properties:
+        my_number:
+          type: number
+        my_string:
+          type: string
+        my_boolean:
+          type: boolean
+          x-codegen-body-parameter-name: boolean_post_body
+      type: object
+    OuterNumber:
+      type: number
+    OuterString:
+      type: string
+    OuterBoolean:
+      type: boolean
+      x-codegen-body-parameter-name: boolean_post_body
+    StringBooleanMap:
+      additionalProperties:
+        type: boolean
+      type: object
+    FileSchemaTestClass:
+      example:
+        file:
+          sourceURI: sourceURI
+        files:
+        - sourceURI: sourceURI
+        - sourceURI: sourceURI
+      properties:
+        file:
+          $ref: '#/components/schemas/File'
+        files:
+          items:
+            $ref: '#/components/schemas/File'
+          type: array
+      type: object
+    File:
+      description: Must be named `File` for test.
+      example:
+        sourceURI: sourceURI
+      properties:
+        sourceURI:
+          description: Test capitalization
+          type: string
+      type: object
+    TypeHolderDefault:
+      properties:
+        string_item:
+          default: what
+          type: string
+        number_item:
+          type: number
+        integer_item:
+          type: integer
+        bool_item:
+          default: true
+          type: boolean
+        array_item:
+          items:
+            type: integer
+          type: array
+      required:
+      - array_item
+      - bool_item
+      - integer_item
+      - number_item
+      - string_item
+      type: object
+    TypeHolderExample:
+      properties:
+        string_item:
+          example: what
+          type: string
+        number_item:
+          example: 1.234
+          type: number
+        float_item:
+          example: 1.234
+          format: float
+          type: number
+        integer_item:
+          example: -2
+          type: integer
+        bool_item:
+          example: true
+          type: boolean
+        array_item:
+          example:
+          - 0
+          - 1
+          - 2
+          - 3
+          items:
+            type: integer
+          type: array
+      required:
+      - array_item
+      - bool_item
+      - float_item
+      - integer_item
+      - number_item
+      - string_item
+      type: object
+    XmlItem:
+      properties:
+        attribute_string:
+          example: string
+          type: string
+          xml:
+            attribute: true
+        attribute_number:
+          example: 1.234
+          type: number
+          xml:
+            attribute: true
+        attribute_integer:
+          example: -2
+          type: integer
+          xml:
+            attribute: true
+        attribute_boolean:
+          example: true
+          type: boolean
+          xml:
+            attribute: true
+        wrapped_array:
+          items:
+            type: integer
+          type: array
+          xml:
+            wrapped: true
+        name_string:
+          example: string
+          type: string
+          xml:
+            name: xml_name_string
+        name_number:
+          example: 1.234
+          type: number
+          xml:
+            name: xml_name_number
+        name_integer:
+          example: -2
+          type: integer
+          xml:
+            name: xml_name_integer
+        name_boolean:
+          example: true
+          type: boolean
+          xml:
+            name: xml_name_boolean
+        name_array:
+          items:
+            type: integer
+            xml:
+              name: xml_name_array_item
+          type: array
+        name_wrapped_array:
+          items:
+            type: integer
+            xml:
+              name: xml_name_wrapped_array_item
+          type: array
+          xml:
+            name: xml_name_wrapped_array
+            wrapped: true
+        prefix_string:
+          example: string
+          type: string
+          xml:
+            prefix: ab
+        prefix_number:
+          example: 1.234
+          type: number
+          xml:
+            prefix: cd
+        prefix_integer:
+          example: -2
+          type: integer
+          xml:
+            prefix: ef
+        prefix_boolean:
+          example: true
+          type: boolean
+          xml:
+            prefix: gh
+        prefix_array:
+          items:
+            type: integer
+            xml:
+              prefix: ij
+          type: array
+        prefix_wrapped_array:
+          items:
+            type: integer
+            xml:
+              prefix: mn
+          type: array
+          xml:
+            prefix: kl
+            wrapped: true
+        namespace_string:
+          example: string
+          type: string
+          xml:
+            namespace: http://a.com/schema
+        namespace_number:
+          example: 1.234
+          type: number
+          xml:
+            namespace: http://b.com/schema
+        namespace_integer:
+          example: -2
+          type: integer
+          xml:
+            namespace: http://c.com/schema
+        namespace_boolean:
+          example: true
+          type: boolean
+          xml:
+            namespace: http://d.com/schema
+        namespace_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://e.com/schema
+          type: array
+        namespace_wrapped_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://g.com/schema
+          type: array
+          xml:
+            namespace: http://f.com/schema
+            wrapped: true
+        prefix_ns_string:
+          example: string
+          type: string
+          xml:
+            namespace: http://a.com/schema
+            prefix: a
+        prefix_ns_number:
+          example: 1.234
+          type: number
+          xml:
+            namespace: http://b.com/schema
+            prefix: b
+        prefix_ns_integer:
+          example: -2
+          type: integer
+          xml:
+            namespace: http://c.com/schema
+            prefix: c
+        prefix_ns_boolean:
+          example: true
+          type: boolean
+          xml:
+            namespace: http://d.com/schema
+            prefix: d
+        prefix_ns_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://e.com/schema
+              prefix: e
+          type: array
+        prefix_ns_wrapped_array:
+          items:
+            type: integer
+            xml:
+              namespace: http://g.com/schema
+              prefix: g
+          type: array
+          xml:
+            namespace: http://f.com/schema
+            prefix: f
+            wrapped: true
+      type: object
+      xml:
+        namespace: http://a.com/schema
+        prefix: pre
+    Dog_allOf:
+      properties:
+        breed:
+          type: string
+      type: object
+    Cat_allOf:
+      properties:
+        declawed:
+          type: boolean
+      type: object
+    BigCat_allOf:
+      properties:
+        kind:
+          enum:
+          - lions
+          - tigers
+          - leopards
+          - jaguars
+          type: string
+      type: object
+  securitySchemes:
+    petstore_auth:
+      flows:
+        implicit:
+          authorizationUrl: http://petstore.swagger.io/api/oauth/dialog
+          scopes:
+            write:pets: modify pets in your account
+            read:pets: read your pets
+      type: oauth2
+    api_key:
+      in: header
+      name: api_key
+      type: apiKey
+    api_key_query:
+      in: query
+      name: api_key_query
+      type: apiKey
+    http_basic_test:
+      scheme: basic
+      type: http
+x-original-swagger-version: "2.0"
diff --git a/samples/openapi3/server/petstore/springboot/.openapi-generator-ignore b/samples/openapi3/server/petstore/springboot/.openapi-generator-ignore
new file mode 100644
index 0000000000000000000000000000000000000000..7484ee590a3894506cf063799b885428f95a71be
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/.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/openapi3/server/petstore/springboot/.openapi-generator/FILES b/samples/openapi3/server/petstore/springboot/.openapi-generator/FILES
new file mode 100644
index 0000000000000000000000000000000000000000..7de4a0d86c095e4ccdf168401d0ded7edef442df
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/.openapi-generator/FILES
@@ -0,0 +1,20 @@
+README.md
+pom.xml
+src/main/java/org/openapitools/OpenAPI2SpringBoot.java
+src/main/java/org/openapitools/RFC3339DateFormat.java
+src/main/java/org/openapitools/api/ApiUtil.java
+src/main/java/org/openapitools/api/PetApi.java
+src/main/java/org/openapitools/api/PetApiController.java
+src/main/java/org/openapitools/api/StoreApi.java
+src/main/java/org/openapitools/api/StoreApiController.java
+src/main/java/org/openapitools/api/UserApi.java
+src/main/java/org/openapitools/api/UserApiController.java
+src/main/java/org/openapitools/configuration/HomeController.java
+src/main/java/org/openapitools/model/Category.java
+src/main/java/org/openapitools/model/ModelApiResponse.java
+src/main/java/org/openapitools/model/Order.java
+src/main/java/org/openapitools/model/Pet.java
+src/main/java/org/openapitools/model/Tag.java
+src/main/java/org/openapitools/model/User.java
+src/main/resources/application.properties
+src/main/resources/openapi.yaml
diff --git a/samples/openapi3/server/petstore/springboot/.openapi-generator/VERSION b/samples/openapi3/server/petstore/springboot/.openapi-generator/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..0984c4c1ad213d3a352049ad557efc9bd5140752
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/.openapi-generator/VERSION
@@ -0,0 +1 @@
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot/README.md b/samples/openapi3/server/petstore/springboot/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5bbe4a495d99c5f2d28ef498b37bbb4423217b7a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/README.md
@@ -0,0 +1,16 @@
+# OpenAPI generated server
+
+Spring Boot Server
+
+
+## Overview
+This server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
+By using the [OpenAPI-Spec](https://openapis.org), you can easily generate a server stub.
+This is an example of building a OpenAPI-enabled server in Java using the SpringBoot framework.
+
+Start your server as a simple java application
+
+You can view the api documentation in swagger-ui by pointing to
+http://localhost:8080/
+
+Change default port value in application.properties
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot/pom.xml b/samples/openapi3/server/petstore/springboot/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d0efb3028ceaff476b42ebb8d6883e5efebdd88f
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/pom.xml
@@ -0,0 +1,71 @@
+<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.openapi3</groupId>
+    <artifactId>springboot</artifactId>
+    <packaging>jar</packaging>
+    <name>springboot</name>
+    <version>1.0.0-SNAPSHOT</version>
+    <properties>
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>2.1.11</swagger-core-version>
+    </properties>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.5.8</version>
+    </parent>
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>${swagger-core-version}</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.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>0.2.2</version>
+        </dependency>
+        <!-- Bean Validation API support -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/OpenAPI2SpringBoot.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/OpenAPI2SpringBoot.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb088f4519352303a48b18ebbdd5ed9a0003ed73
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/OpenAPI2SpringBoot.java
@@ -0,0 +1,63 @@
+package org.openapitools;
+
+import com.fasterxml.jackson.databind.Module;
+import org.openapitools.jackson.nullable.JsonNullableModule;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.ExitCodeGenerator;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@SpringBootApplication
+@ComponentScan(basePackages = {"org.openapitools", "org.openapitools.api" , "org.openapitools.configuration"})
+public class OpenAPI2SpringBoot implements CommandLineRunner {
+
+    @Override
+    public void run(String... arg0) throws Exception {
+        if (arg0.length > 0 && arg0[0].equals("exitcode")) {
+            throw new ExitException();
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        new SpringApplication(OpenAPI2SpringBoot.class).run(args);
+    }
+
+    static class ExitException extends RuntimeException implements ExitCodeGenerator {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public int getExitCode() {
+            return 10;
+        }
+
+    }
+
+    @Bean
+    public WebMvcConfigurer webConfigurer() {
+        return new WebMvcConfigurer() {
+            /*@Override
+            public void addCorsMappings(CorsRegistry registry) {
+                registry.addMapping("/**")
+                        .allowedOrigins("*")
+                        .allowedMethods("*")
+                        .allowedHeaders("Content-Type");
+            }*/
+
+            @Override
+            public void addResourceHandlers(ResourceHandlerRegistry registry) {
+                registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/3.14.2/");
+            }
+        };
+    }
+
+    @Bean
+    public Module jsonNullableModule() {
+        return new JsonNullableModule();
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/RFC3339DateFormat.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/RFC3339DateFormat.java
new file mode 100644
index 0000000000000000000000000000000000000000..bcd3936d8b343ef7553782b552e9798b69bc5a02
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/RFC3339DateFormat.java
@@ -0,0 +1,38 @@
+package org.openapitools;
+
+import com.fasterxml.jackson.databind.util.StdDateFormat;
+
+import java.text.DateFormat;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+public class RFC3339DateFormat extends DateFormat {
+  private static final long serialVersionUID = 1L;
+  private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC");
+
+  private final StdDateFormat fmt = new StdDateFormat()
+          .withTimeZone(TIMEZONE_Z)
+          .withColonInTimeZone(true);
+
+  public RFC3339DateFormat() {
+    this.calendar = new GregorianCalendar();
+  }
+
+  @Override
+  public Date parse(String source, ParsePosition pos) {
+    return fmt.parse(source, pos);
+  }
+
+  @Override
+  public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
+    return fmt.format(date, toAppendTo, fieldPosition);
+  }
+
+  @Override
+  public Object clone() {
+    return this;
+  }
+}
\ No newline at end of file
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/ApiUtil.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/ApiUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..1245b1dd0ccf3cae51824d69fe4074d9acb576df
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/ApiUtil.java
@@ -0,0 +1,19 @@
+package org.openapitools.api;
+
+import org.springframework.web.context.request.NativeWebRequest;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+public class ApiUtil {
+    public static void setExampleResponse(NativeWebRequest req, String contentType, String example) {
+        try {
+            HttpServletResponse res = req.getNativeResponse(HttpServletResponse.class);
+            res.setCharacterEncoding("UTF-8");
+            res.addHeader("Content-Type", contentType);
+            res.getWriter().print(example);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..0bec586d6930e7066e2ce54652496d745f94c072
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java
@@ -0,0 +1,382 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.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.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "pet", description = "the pet API")
+public interface PetApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /pet : Add a new pet to the store
+     *
+     * @param pet Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Add a new pet to the store",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet",
+        produces = { "application/xml", "application/json" },
+        consumes = { "application/json", "application/xml" }
+    )
+    default ResponseEntity<Pet> addPet(
+        @Parameter(name = "Pet", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet pet
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * DELETE /pet/{petId} : Deletes a pet
+     *
+     * @param petId Pet id to delete (required)
+     * @param apiKey  (optional)
+     * @return Invalid pet value (status code 400)
+     */
+    @Operation(
+        summary = "Deletes a pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid pet value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/pet/{petId}"
+    )
+    default ResponseEntity<Void> deletePet(
+        @Parameter(name = "petId", description = "Pet id to delete", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "api_key", description = "", schema = @Schema(description = "")) @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /pet/findByStatus : Finds Pets by status
+     * Multiple status values can be provided with comma separated strings
+     *
+     * @param status Status values that need to be considered for filter (required)
+     * @return successful operation (status code 200)
+     *         or Invalid status value (status code 400)
+     */
+    @Operation(
+        summary = "Finds Pets by status",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid status value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByStatus",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<List<Pet>> findPetsByStatus(
+        @NotNull @Parameter(name = "status", description = "Status values that need to be considered for filter", required = true, schema = @Schema(description = "", allowableValues = { "available", "pending", "sold" })) @Valid @RequestParam(value = "status", required = true) List<String> status
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /pet/findByTags : Finds Pets by tags
+     * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
+     *
+     * @param tags Tags to filter by (required)
+     * @return successful operation (status code 200)
+     *         or Invalid tag value (status code 400)
+     * @deprecated
+     */
+    @Operation(
+        summary = "Finds Pets by tags",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid tag value")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/findByTags",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @Parameter(name = "tags", description = "Tags to filter by", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "tags", required = true) List<String> tags
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /pet/{petId} : Find pet by ID
+     * Returns a single pet
+     *
+     * @param petId ID of pet to return (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     */
+    @Operation(
+        summary = "Find pet by ID",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/pet/{petId}",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Pet> getPetById(
+        @Parameter(name = "petId", description = "ID of pet to return", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PUT /pet : Update an existing pet
+     *
+     * @param pet Pet object that needs to be added to the store (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Pet not found (status code 404)
+     *         or Validation exception (status code 405)
+     */
+    @Operation(
+        summary = "Update an existing pet",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Pet.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Pet not found"),
+            @ApiResponse(responseCode = "405", description = "Validation exception")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/pet",
+        produces = { "application/xml", "application/json" },
+        consumes = { "application/json", "application/xml" }
+    )
+    default ResponseEntity<Pet> updatePet(
+        @Parameter(name = "Pet", description = "Pet object that needs to be added to the store", required = true, schema = @Schema(description = "")) @Valid @RequestBody Pet pet
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<Pet> <id>123456789</id> <name>doggie</name> <photoUrls> <photoUrls>aeiou</photoUrls> </photoUrls> <tags> </tags> <status>aeiou</status> </Pet>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /pet/{petId} : Updates a pet in the store with form data
+     *
+     * @param petId ID of pet that needs to be updated (required)
+     * @param name Updated name of the pet (optional)
+     * @param status Updated status of the pet (optional)
+     * @return Invalid input (status code 405)
+     */
+    @Operation(
+        summary = "Updates a pet in the store with form data",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "405", description = "Invalid input")
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}",
+        consumes = { "application/x-www-form-urlencoded" }
+    )
+    default ResponseEntity<Void> updatePetWithForm(
+        @Parameter(name = "petId", description = "ID of pet that needs to be updated", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "name", description = "Updated name of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "name", required = false) String name,
+        @Parameter(name = "status", description = "Updated status of the pet", schema = @Schema(description = "")) @Valid @RequestPart(value = "status", required = false) String status
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /pet/{petId}/uploadImage : uploads an image
+     *
+     * @param petId ID of pet to update (required)
+     * @param additionalMetadata Additional data to pass to server (optional)
+     * @param file file to upload (optional)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "uploads an image",
+        tags = { "pet" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  ModelApiResponse.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "petstore_auth", scopes={ "write:pets", "read:pets" })
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/pet/{petId}/uploadImage",
+        produces = { "application/json" },
+        consumes = { "multipart/form-data" }
+    )
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @Parameter(name = "petId", description = "ID of pet to update", required = true, schema = @Schema(description = "")) @PathVariable("petId") Long petId,
+        @Parameter(name = "additionalMetadata", description = "Additional data to pass to server", schema = @Schema(description = "")) @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @Parameter(name = "file", description = "file to upload", schema = @Schema(description = "")) @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/PetApiController.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/PetApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..e72c57e3cbec85aac1882dc1faac9beb651776b9
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/PetApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class PetApiController implements PetApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public PetApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..98cbb475200d38e31e78016f3a8eaaf308262089
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java
@@ -0,0 +1,184 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.Map;
+import org.openapitools.model.Order;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "store", description = "the store API")
+public interface StoreApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * DELETE /store/order/{orderId} : Delete purchase order by ID
+     * For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
+     *
+     * @param orderId ID of the order that needs to be deleted (required)
+     * @return Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/store/order/{orderId}"
+    )
+    default ResponseEntity<Void> deleteOrder(
+        @Parameter(name = "orderId", description = "ID of the order that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("orderId") String orderId
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /store/inventory : Returns pet inventories by status
+     * Returns a map of status codes to quantities
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Returns pet inventories by status",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Map.class)))
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/inventory",
+        produces = { "application/json" }
+    )
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /store/order/{orderId} : Find purchase order by ID
+     * For valid response try integer IDs with value &lt;&#x3D; 5 or &gt; 10. Other values will generated exceptions
+     *
+     * @param orderId ID of pet that needs to be fetched (required)
+     * @return successful operation (status code 200)
+     *         or Invalid ID supplied (status code 400)
+     *         or Order not found (status code 404)
+     */
+    @Operation(
+        summary = "Find purchase order by ID",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid ID supplied"),
+            @ApiResponse(responseCode = "404", description = "Order not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/store/order/{orderId}",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @Parameter(name = "orderId", description = "ID of pet that needs to be fetched", required = true, schema = @Schema(description = "")) @PathVariable("orderId") Long orderId
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<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>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /store/order : Place an order for a pet
+     *
+     * @param order order placed for purchasing the pet (required)
+     * @return successful operation (status code 200)
+     *         or Invalid Order (status code 400)
+     */
+    @Operation(
+        summary = "Place an order for a pet",
+        tags = { "store" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  Order.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid Order")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/store/order",
+        produces = { "application/xml", "application/json" },
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Order> placeOrder(
+        @Parameter(name = "Order", description = "order placed for purchasing the pet", required = true, schema = @Schema(description = "")) @Valid @RequestBody Order order
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<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>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApiController.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..1293b5c8f6e4b7ac0041c3783a8add90811867ed
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class StoreApiController implements StoreApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public StoreApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java
new file mode 100644
index 0000000000000000000000000000000000000000..899416135fc5475fcee00d723d3cd0a4f5a5bd3c
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java
@@ -0,0 +1,294 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.List;
+import java.time.OffsetDateTime;
+import org.openapitools.model.User;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Validated
+@Tag(name = "user", description = "the user API")
+public interface UserApi {
+
+    default Optional<NativeWebRequest> getRequest() {
+        return Optional.empty();
+    }
+
+    /**
+     * POST /user : Create user
+     * This can only be done by the logged in user.
+     *
+     * @param user Created user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Create user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> createUser(
+        @Parameter(name = "User", description = "Created user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User user
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /user/createWithArray : Creates list of users with given input array
+     *
+     * @param user List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithArray",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> createUsersWithArrayInput(
+        @Parameter(name = "User", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> user
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * POST /user/createWithList : Creates list of users with given input array
+     *
+     * @param user List of user object (required)
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Creates list of users with given input array",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.POST,
+        value = "/user/createWithList",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> createUsersWithListInput(
+        @Parameter(name = "User", description = "List of user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody List<User> user
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * DELETE /user/{username} : Delete user
+     * This can only be done by the logged in user.
+     *
+     * @param username The name that needs to be deleted (required)
+     * @return Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Delete user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.DELETE,
+        value = "/user/{username}"
+    )
+    default ResponseEntity<Void> deleteUser(
+        @Parameter(name = "username", description = "The name that needs to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /user/{username} : Get user by user name
+     *
+     * @param username The name that needs to be fetched. Use user1 for testing. (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Get user by user name",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  User.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/{username}",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<User> getUserByName(
+        @Parameter(name = "username", description = "The name that needs to be fetched. Use user1 for testing.", required = true, schema = @Schema(description = "")) @PathVariable("username") String username
+    ) {
+        getRequest().ifPresent(request -> {
+            for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
+                    String exampleString = "{ \"firstName\" : \"firstName\", \"lastName\" : \"lastName\", \"password\" : \"password\", \"userStatus\" : 6, \"phone\" : \"phone\", \"id\" : 0, \"email\" : \"email\", \"username\" : \"username\" }";
+                    ApiUtil.setExampleResponse(request, "application/json", exampleString);
+                    break;
+                }
+                if (mediaType.isCompatibleWith(MediaType.valueOf("application/xml"))) {
+                    String exampleString = "<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>";
+                    ApiUtil.setExampleResponse(request, "application/xml", exampleString);
+                    break;
+                }
+            }
+        });
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /user/login : Logs user into the system
+     *
+     * @param username The user name for login (required)
+     * @param password The password for login in clear text (required)
+     * @return successful operation (status code 200)
+     *         or Invalid username/password supplied (status code 400)
+     */
+    @Operation(
+        summary = "Logs user into the system",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation =  String.class))),
+            @ApiResponse(responseCode = "400", description = "Invalid username/password supplied")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/login",
+        produces = { "application/xml", "application/json" }
+    )
+    default ResponseEntity<String> loginUser(
+        @NotNull @Pattern(regexp = "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$") @Parameter(name = "username", description = "The user name for login", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @Parameter(name = "password", description = "The password for login in clear text", required = true, schema = @Schema(description = "")) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * GET /user/logout : Logs out current logged in user session
+     *
+     * @return successful operation (status code 200)
+     */
+    @Operation(
+        summary = "Logs out current logged in user session",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "200", description = "successful operation")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.GET,
+        value = "/user/logout"
+    )
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+
+    /**
+     * PUT /user/{username} : Updated user
+     * This can only be done by the logged in user.
+     *
+     * @param username name that need to be deleted (required)
+     * @param user Updated user object (required)
+     * @return Invalid user supplied (status code 400)
+     *         or User not found (status code 404)
+     */
+    @Operation(
+        summary = "Updated user",
+        tags = { "user" },
+        responses = {
+            @ApiResponse(responseCode = "400", description = "Invalid user supplied"),
+            @ApiResponse(responseCode = "404", description = "User not found")
+        },
+        security = {
+            @SecurityRequirement(name = "api_key")
+        }
+    )
+    @RequestMapping(
+        method = RequestMethod.PUT,
+        value = "/user/{username}",
+        consumes = { "application/json" }
+    )
+    default ResponseEntity<Void> updateUser(
+        @Parameter(name = "username", description = "name that need to be deleted", required = true, schema = @Schema(description = "")) @PathVariable("username") String username,
+        @Parameter(name = "User", description = "Updated user object", required = true, schema = @Schema(description = "")) @Valid @RequestBody User user
+    ) {
+        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/UserApiController.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/UserApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f6c4d9a2d6f0625dd27d17ef813d5deb6cf51ae
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/api/UserApiController.java
@@ -0,0 +1,24 @@
+package org.openapitools.api;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.context.request.NativeWebRequest;
+import java.util.Optional;
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+@Controller
+@RequestMapping("${openapi.openAPIPetstore.base-path:/v2}")
+public class UserApiController implements UserApi {
+
+    private final NativeWebRequest request;
+
+    @org.springframework.beans.factory.annotation.Autowired
+    public UserApiController(NativeWebRequest request) {
+        this.request = request;
+    }
+
+    @Override
+    public Optional<NativeWebRequest> getRequest() {
+        return Optional.ofNullable(request);
+    }
+
+}
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/configuration/HomeController.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/configuration/HomeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..34bae16b8986820eef90212adb88e86fa2db0ea8
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/configuration/HomeController.java
@@ -0,0 +1,53 @@
+package org.openapitools.configuration;
+
+import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.io.Resource;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StreamUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+
+/**
+ * Home redirection to OpenAPI api documentation
+ */
+@Controller
+public class HomeController {
+
+    private static YAMLMapper yamlMapper = new YAMLMapper();
+
+    @Value("classpath:/openapi.yaml")
+    private Resource openapi;
+
+    @Bean
+    public String openapiContent() throws IOException {
+        try(InputStream is = openapi.getInputStream()) {
+            return StreamUtils.copyToString(is, Charset.defaultCharset());
+        }
+    }
+
+    @GetMapping(value = "/openapi.yaml", produces = "application/vnd.oai.openapi")
+    @ResponseBody
+    public String openapiYaml() throws IOException {
+        return openapiContent();
+    }
+
+    @GetMapping(value = "/openapi.json", produces = "application/json")
+    @ResponseBody
+    public Object openapiJson() throws IOException {
+        return yamlMapper.readValue(openapiContent(), Object.class);
+    }
+
+    @RequestMapping("/")
+    public String index() {
+        return "redirect:swagger-ui/index.html?url=../openapi.json";
+    }
+
+
+}
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/Category.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/Category.java
new file mode 100644
index 0000000000000000000000000000000000000000..463de0ed39a31ec4d78e3561fd95bbcda0adf04a
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/Category.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A category for a pet
+ */
+@Schema(name = "Category",description = "A category for a pet")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Category   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Category id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Category name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+@Pattern(regexp = "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$") 
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Category category = (Category) o;
+    return Objects.equals(this.id, category.id) &&
+        Objects.equals(this.name, category.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Category {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/ModelApiResponse.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/ModelApiResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..0ef610e38f015da0ce3e71fa99fde283c1d59cb6
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/ModelApiResponse.java
@@ -0,0 +1,134 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * Describes the result of uploading an image resource
+ */
+@Schema(name = "ApiResponse",description = "Describes the result of uploading an image resource")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelApiResponse   {
+  @JsonProperty("code")
+  private Integer code;
+
+  @JsonProperty("type")
+  private String type;
+
+  @JsonProperty("message")
+  private String message;
+
+  public ModelApiResponse code(Integer code) {
+    this.code = code;
+    return this;
+  }
+
+  /**
+   * Get code
+   * @return code
+  */
+  @Schema(name = "code", defaultValue = "")
+
+
+  public Integer getCode() {
+    return code;
+  }
+
+  public void setCode(Integer code) {
+    this.code = code;
+  }
+
+  public ModelApiResponse type(String type) {
+    this.type = type;
+    return this;
+  }
+
+  /**
+   * Get type
+   * @return type
+  */
+  @Schema(name = "type", defaultValue = "")
+
+
+  public String getType() {
+    return type;
+  }
+
+  public void setType(String type) {
+    this.type = type;
+  }
+
+  public ModelApiResponse message(String message) {
+    this.message = message;
+    return this;
+  }
+
+  /**
+   * Get message
+   * @return message
+  */
+  @Schema(name = "message", defaultValue = "")
+
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ModelApiResponse _apiResponse = (ModelApiResponse) o;
+    return Objects.equals(this.code, _apiResponse.code) &&
+        Objects.equals(this.type, _apiResponse.type) &&
+        Objects.equals(this.message, _apiResponse.message);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(code, type, message);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ModelApiResponse {\n");
+    
+    sb.append("    code: ").append(toIndentedString(code)).append("\n");
+    sb.append("    type: ").append(toIndentedString(type)).append("\n");
+    sb.append("    message: ").append(toIndentedString(message)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/Order.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/Order.java
new file mode 100644
index 0000000000000000000000000000000000000000..528598b79ea73023103fc45511908a8c65602454
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/Order.java
@@ -0,0 +1,250 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.time.OffsetDateTime;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * An order for a pets from the pet store
+ */
+@Schema(name = "Order",description = "An order for a pets from the pet store")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Order   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("petId")
+  private Long petId;
+
+  @JsonProperty("quantity")
+  private Integer quantity;
+
+  @JsonProperty("shipDate")
+  @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+  private OffsetDateTime shipDate;
+
+  /**
+   * Order Status
+   */
+  public enum StatusEnum {
+    PLACED("placed"),
+    
+    APPROVED("approved"),
+    
+    DELIVERED("delivered");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  @JsonProperty("complete")
+  private Boolean complete = false;
+
+  public Order id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Order petId(Long petId) {
+    this.petId = petId;
+    return this;
+  }
+
+  /**
+   * Get petId
+   * @return petId
+  */
+  @Schema(name = "petId", defaultValue = "")
+
+
+  public Long getPetId() {
+    return petId;
+  }
+
+  public void setPetId(Long petId) {
+    this.petId = petId;
+  }
+
+  public Order quantity(Integer quantity) {
+    this.quantity = quantity;
+    return this;
+  }
+
+  /**
+   * Get quantity
+   * @return quantity
+  */
+  @Schema(name = "quantity", defaultValue = "")
+
+
+  public Integer getQuantity() {
+    return quantity;
+  }
+
+  public void setQuantity(Integer quantity) {
+    this.quantity = quantity;
+  }
+
+  public Order shipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+    return this;
+  }
+
+  /**
+   * Get shipDate
+   * @return shipDate
+  */
+  @Schema(name = "shipDate", defaultValue = "")
+
+  @Valid
+
+  public OffsetDateTime getShipDate() {
+    return shipDate;
+  }
+
+  public void setShipDate(OffsetDateTime shipDate) {
+    this.shipDate = shipDate;
+  }
+
+  public Order status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Order Status
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "Order Status")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+  public Order complete(Boolean complete) {
+    this.complete = complete;
+    return this;
+  }
+
+  /**
+   * Get complete
+   * @return complete
+  */
+  @Schema(name = "complete", defaultValue = "")
+
+
+  public Boolean getComplete() {
+    return complete;
+  }
+
+  public void setComplete(Boolean complete) {
+    this.complete = complete;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Order order = (Order) o;
+    return Objects.equals(this.id, order.id) &&
+        Objects.equals(this.petId, order.petId) &&
+        Objects.equals(this.quantity, order.quantity) &&
+        Objects.equals(this.shipDate, order.shipDate) &&
+        Objects.equals(this.status, order.status) &&
+        Objects.equals(this.complete, order.complete);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, petId, quantity, shipDate, status, complete);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Order {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    petId: ").append(toIndentedString(petId)).append("\n");
+    sb.append("    quantity: ").append(toIndentedString(quantity)).append("\n");
+    sb.append("    shipDate: ").append(toIndentedString(shipDate)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    complete: ").append(toIndentedString(complete)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/Pet.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/Pet.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c2986fea846e0386388ff797d8c60905ef99aa3
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/Pet.java
@@ -0,0 +1,270 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.model.Category;
+import org.openapitools.model.Tag;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A pet for sale in the pet store
+ */
+@Schema(name = "Pet",description = "A pet for sale in the pet store")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Pet   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("category")
+  private Category category;
+
+  @JsonProperty("name")
+  private String name;
+
+  @JsonProperty("photoUrls")
+  @Valid
+  private List<String> photoUrls = new ArrayList<>();
+
+  @JsonProperty("tags")
+  @Valid
+  private List<Tag> tags = null;
+
+  /**
+   * pet status in the store
+   */
+  public enum StatusEnum {
+    AVAILABLE("available"),
+    
+    PENDING("pending"),
+    
+    SOLD("sold");
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equals(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  @JsonProperty("status")
+  private StatusEnum status;
+
+  public Pet id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Pet category(Category category) {
+    this.category = category;
+    return this;
+  }
+
+  /**
+   * Get category
+   * @return category
+  */
+  @Schema(name = "category", defaultValue = "")
+
+  @Valid
+
+  public Category getCategory() {
+    return category;
+  }
+
+  public void setCategory(Category category) {
+    this.category = category;
+  }
+
+  public Pet name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", example = "doggie", required = true, defaultValue = "")
+  @NotNull
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public Pet photoUrls(List<String> photoUrls) {
+    this.photoUrls = photoUrls;
+    return this;
+  }
+
+  public Pet addPhotoUrlsItem(String photoUrlsItem) {
+    this.photoUrls.add(photoUrlsItem);
+    return this;
+  }
+
+  /**
+   * Get photoUrls
+   * @return photoUrls
+  */
+  @Schema(name = "photoUrls", required = true, defaultValue = "")
+  @NotNull
+
+
+  public List<String> getPhotoUrls() {
+    return photoUrls;
+  }
+
+  public void setPhotoUrls(List<String> photoUrls) {
+    this.photoUrls = photoUrls;
+  }
+
+  public Pet tags(List<Tag> tags) {
+    this.tags = tags;
+    return this;
+  }
+
+  public Pet addTagsItem(Tag tagsItem) {
+    if (this.tags == null) {
+      this.tags = new ArrayList<>();
+    }
+    this.tags.add(tagsItem);
+    return this;
+  }
+
+  /**
+   * Get tags
+   * @return tags
+  */
+  @Schema(name = "tags", defaultValue = "")
+
+  @Valid
+
+  public List<Tag> getTags() {
+    return tags;
+  }
+
+  public void setTags(List<Tag> tags) {
+    this.tags = tags;
+  }
+
+  public Pet status(StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * pet status in the store
+   * @return status
+  */
+  @Schema(name = "status", defaultValue = "pet status in the store")
+
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+  public void setStatus(StatusEnum status) {
+    this.status = status;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Pet pet = (Pet) o;
+    return Objects.equals(this.id, pet.id) &&
+        Objects.equals(this.category, pet.category) &&
+        Objects.equals(this.name, pet.name) &&
+        Objects.equals(this.photoUrls, pet.photoUrls) &&
+        Objects.equals(this.tags, pet.tags) &&
+        Objects.equals(this.status, pet.status);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, category, name, photoUrls, tags, status);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Pet {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    category: ").append(toIndentedString(category)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    photoUrls: ").append(toIndentedString(photoUrls)).append("\n");
+    sb.append("    tags: ").append(toIndentedString(tags)).append("\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/Tag.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/Tag.java
new file mode 100644
index 0000000000000000000000000000000000000000..27166f687a27bb2f4a97d9ffdc486b35a263bd2e
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/Tag.java
@@ -0,0 +1,109 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A tag for a pet
+ */
+@Schema(name = "Tag",description = "A tag for a pet")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class Tag   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("name")
+  private String name;
+
+  public Tag id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Tag name(String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+  */
+  @Schema(name = "name", defaultValue = "")
+
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Tag tag = (Tag) o;
+    return Objects.equals(this.id, tag.id) &&
+        Objects.equals(this.name, tag.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Tag {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/User.java b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/User.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba24f681c1df96bffda12b6d91738e52801d6077
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/java/org/openapitools/model/User.java
@@ -0,0 +1,259 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+
+import java.util.*;
+
+/**
+ * A User who is purchasing from the pet store
+ */
+@Schema(name = "User",description = "A User who is purchasing from the pet store")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class User   {
+  @JsonProperty("id")
+  private Long id;
+
+  @JsonProperty("username")
+  private String username;
+
+  @JsonProperty("firstName")
+  private String firstName;
+
+  @JsonProperty("lastName")
+  private String lastName;
+
+  @JsonProperty("email")
+  private String email;
+
+  @JsonProperty("password")
+  private String password;
+
+  @JsonProperty("phone")
+  private String phone;
+
+  @JsonProperty("userStatus")
+  private Integer userStatus;
+
+  public User id(Long id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+  */
+  @Schema(name = "id", defaultValue = "")
+
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public User username(String username) {
+    this.username = username;
+    return this;
+  }
+
+  /**
+   * Get username
+   * @return username
+  */
+  @Schema(name = "username", defaultValue = "")
+
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public User firstName(String firstName) {
+    this.firstName = firstName;
+    return this;
+  }
+
+  /**
+   * Get firstName
+   * @return firstName
+  */
+  @Schema(name = "firstName", defaultValue = "")
+
+
+  public String getFirstName() {
+    return firstName;
+  }
+
+  public void setFirstName(String firstName) {
+    this.firstName = firstName;
+  }
+
+  public User lastName(String lastName) {
+    this.lastName = lastName;
+    return this;
+  }
+
+  /**
+   * Get lastName
+   * @return lastName
+  */
+  @Schema(name = "lastName", defaultValue = "")
+
+
+  public String getLastName() {
+    return lastName;
+  }
+
+  public void setLastName(String lastName) {
+    this.lastName = lastName;
+  }
+
+  public User email(String email) {
+    this.email = email;
+    return this;
+  }
+
+  /**
+   * Get email
+   * @return email
+  */
+  @Schema(name = "email", defaultValue = "")
+
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+  public User password(String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+  */
+  @Schema(name = "password", defaultValue = "")
+
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public User phone(String phone) {
+    this.phone = phone;
+    return this;
+  }
+
+  /**
+   * Get phone
+   * @return phone
+  */
+  @Schema(name = "phone", defaultValue = "")
+
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public User userStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+    return this;
+  }
+
+  /**
+   * User Status
+   * @return userStatus
+  */
+  @Schema(name = "userStatus", defaultValue = "User Status")
+
+
+  public Integer getUserStatus() {
+    return userStatus;
+  }
+
+  public void setUserStatus(Integer userStatus) {
+    this.userStatus = userStatus;
+  }
+
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    User user = (User) o;
+    return Objects.equals(this.id, user.id) &&
+        Objects.equals(this.username, user.username) &&
+        Objects.equals(this.firstName, user.firstName) &&
+        Objects.equals(this.lastName, user.lastName) &&
+        Objects.equals(this.email, user.email) &&
+        Objects.equals(this.password, user.password) &&
+        Objects.equals(this.phone, user.phone) &&
+        Objects.equals(this.userStatus, user.userStatus);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, username, firstName, lastName, email, password, phone, userStatus);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class User {\n");
+    
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    username: ").append(toIndentedString(username)).append("\n");
+    sb.append("    firstName: ").append(toIndentedString(firstName)).append("\n");
+    sb.append("    lastName: ").append(toIndentedString(lastName)).append("\n");
+    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    phone: ").append(toIndentedString(phone)).append("\n");
+    sb.append("    userStatus: ").append(toIndentedString(userStatus)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+}
+
diff --git a/samples/openapi3/server/petstore/springboot/src/main/resources/application.properties b/samples/openapi3/server/petstore/springboot/src/main/resources/application.properties
new file mode 100644
index 0000000000000000000000000000000000000000..7e90813e59b2dfa9dff16823ed63efb99a87d680
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/resources/application.properties
@@ -0,0 +1,3 @@
+server.port=8080
+spring.jackson.date-format=org.openapitools.RFC3339DateFormat
+spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
diff --git a/samples/openapi3/server/petstore/springboot/src/main/resources/openapi.yaml b/samples/openapi3/server/petstore/springboot/src/main/resources/openapi.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..56703dfefb56984537d5210902a68fa4918643cd
--- /dev/null
+++ b/samples/openapi3/server/petstore/springboot/src/main/resources/openapi.yaml
@@ -0,0 +1,893 @@
+openapi: 3.0.0
+info:
+  description: This is a sample server Petstore server. For this sample, you can use
+    the api key `special-key` to test the authorization filters.
+  license:
+    name: Apache-2.0
+    url: https://www.apache.org/licenses/LICENSE-2.0.html
+  title: OpenAPI Petstore
+  version: 1.0.0
+externalDocs:
+  description: Find out more about Swagger
+  url: http://swagger.io
+servers:
+- url: http://petstore.swagger.io/v2
+tags:
+- description: Everything about your Pets
+  name: pet
+- description: Access to Petstore orders
+  name: store
+- description: Operations about user
+  name: user
+paths:
+  /pet:
+    post:
+      operationId: addPet
+      requestBody:
+        $ref: '#/components/requestBodies/Pet'
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Pet'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Pet'
+          description: successful operation
+        "405":
+          description: Invalid input
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Add a new pet to the store
+      tags:
+      - pet
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    put:
+      operationId: updatePet
+      requestBody:
+        $ref: '#/components/requestBodies/Pet'
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Pet'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Pet'
+          description: successful operation
+        "400":
+          description: Invalid ID supplied
+        "404":
+          description: Pet not found
+        "405":
+          description: Validation exception
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Update an existing pet
+      tags:
+      - pet
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/findByStatus:
+    get:
+      description: Multiple status values can be provided with comma separated strings
+      operationId: findPetsByStatus
+      parameters:
+      - deprecated: true
+        description: Status values that need to be considered for filter
+        explode: false
+        in: query
+        name: status
+        required: true
+        schema:
+          items:
+            default: available
+            enum:
+            - available
+            - pending
+            - sold
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+          description: successful operation
+        "400":
+          description: Invalid status value
+      security:
+      - petstore_auth:
+        - read:pets
+      summary: Finds Pets by status
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/findByTags:
+    get:
+      deprecated: true
+      description: Multiple tags can be provided with comma separated strings. Use
+        tag1, tag2, tag3 for testing.
+      operationId: findPetsByTags
+      parameters:
+      - description: Tags to filter by
+        explode: false
+        in: query
+        name: tags
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Pet'
+                type: array
+          description: successful operation
+        "400":
+          description: Invalid tag value
+      security:
+      - petstore_auth:
+        - read:pets
+      summary: Finds Pets by tags
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/{petId}:
+    delete:
+      operationId: deletePet
+      parameters:
+      - explode: false
+        in: header
+        name: api_key
+        required: false
+        schema:
+          type: string
+        style: simple
+      - description: Pet id to delete
+        explode: false
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+        style: simple
+      responses:
+        "400":
+          description: Invalid pet value
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Deletes a pet
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    get:
+      description: Returns a single pet
+      operationId: getPetById
+      parameters:
+      - description: ID of pet to return
+        explode: false
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+        style: simple
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Pet'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Pet'
+          description: successful operation
+        "400":
+          description: Invalid ID supplied
+        "404":
+          description: Pet not found
+      security:
+      - api_key: []
+      summary: Find pet by ID
+      tags:
+      - pet
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+    post:
+      operationId: updatePetWithForm
+      parameters:
+      - description: ID of pet that needs to be updated
+        explode: false
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+        style: simple
+      requestBody:
+        $ref: '#/components/requestBodies/inline_object'
+        content:
+          application/x-www-form-urlencoded:
+            schema:
+              properties:
+                name:
+                  description: Updated name of the pet
+                  type: string
+                status:
+                  description: Updated status of the pet
+                  type: string
+              type: object
+      responses:
+        "405":
+          description: Invalid input
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: Updates a pet in the store with form data
+      tags:
+      - pet
+      x-contentType: application/x-www-form-urlencoded
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /pet/{petId}/uploadImage:
+    post:
+      operationId: uploadFile
+      parameters:
+      - description: ID of pet to update
+        explode: false
+        in: path
+        name: petId
+        required: true
+        schema:
+          format: int64
+          type: integer
+        style: simple
+      requestBody:
+        $ref: '#/components/requestBodies/inline_object_1'
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                additionalMetadata:
+                  description: Additional data to pass to server
+                  type: string
+                file:
+                  description: file to upload
+                  format: binary
+                  type: string
+              type: object
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiResponse'
+          description: successful operation
+      security:
+      - petstore_auth:
+        - write:pets
+        - read:pets
+      summary: uploads an image
+      tags:
+      - pet
+      x-contentType: multipart/form-data
+      x-accepts: application/json
+      x-tags:
+      - tag: pet
+  /store/inventory:
+    get:
+      description: Returns a map of status codes to quantities
+      operationId: getInventory
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                additionalProperties:
+                  format: int32
+                  type: integer
+                type: object
+          description: successful operation
+      security:
+      - api_key: []
+      summary: Returns pet inventories by status
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /store/order:
+    post:
+      operationId: placeOrder
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Order'
+        description: order placed for purchasing the pet
+        required: true
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Order'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Order'
+          description: successful operation
+        "400":
+          description: Invalid Order
+      summary: Place an order for a pet
+      tags:
+      - store
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /store/order/{orderId}:
+    delete:
+      description: For valid response try integer IDs with value < 1000. Anything
+        above 1000 or nonintegers will generate API errors
+      operationId: deleteOrder
+      parameters:
+      - description: ID of the order that needs to be deleted
+        explode: false
+        in: path
+        name: orderId
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "400":
+          description: Invalid ID supplied
+        "404":
+          description: Order not found
+      summary: Delete purchase order by ID
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+    get:
+      description: For valid response try integer IDs with value <= 5 or > 10. Other
+        values will generated exceptions
+      operationId: getOrderById
+      parameters:
+      - description: ID of pet that needs to be fetched
+        explode: false
+        in: path
+        name: orderId
+        required: true
+        schema:
+          format: int64
+          maximum: 5
+          minimum: 1
+          type: integer
+        style: simple
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/Order'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Order'
+          description: successful operation
+        "400":
+          description: Invalid ID supplied
+        "404":
+          description: Order not found
+      summary: Find purchase order by ID
+      tags:
+      - store
+      x-accepts: application/json
+      x-tags:
+      - tag: store
+  /user:
+    post:
+      description: This can only be done by the logged in user.
+      operationId: createUser
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/User'
+        description: Created user object
+        required: true
+      responses:
+        default:
+          description: successful operation
+      security:
+      - api_key: []
+      summary: Create user
+      tags:
+      - user
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/createWithArray:
+    post:
+      operationId: createUsersWithArrayInput
+      requestBody:
+        $ref: '#/components/requestBodies/UserArray'
+      responses:
+        default:
+          description: successful operation
+      security:
+      - api_key: []
+      summary: Creates list of users with given input array
+      tags:
+      - user
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/createWithList:
+    post:
+      operationId: createUsersWithListInput
+      requestBody:
+        $ref: '#/components/requestBodies/UserArray'
+      responses:
+        default:
+          description: successful operation
+      security:
+      - api_key: []
+      summary: Creates list of users with given input array
+      tags:
+      - user
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/login:
+    get:
+      operationId: loginUser
+      parameters:
+      - description: The user name for login
+        explode: true
+        in: query
+        name: username
+        required: true
+        schema:
+          pattern: ^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$
+          type: string
+        style: form
+      - description: The password for login in clear text
+        explode: true
+        in: query
+        name: password
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                type: string
+            application/json:
+              schema:
+                type: string
+          description: successful operation
+          headers:
+            Set-Cookie:
+              description: Cookie authentication key for use with the `api_key` apiKey
+                authentication.
+              explode: false
+              schema:
+                example: AUTH_KEY=abcde12345; Path=/; HttpOnly
+                type: string
+              style: simple
+            X-Rate-Limit:
+              description: calls per hour allowed by the user
+              explode: false
+              schema:
+                format: int32
+                type: integer
+              style: simple
+            X-Expires-After:
+              description: date in UTC when token expires
+              explode: false
+              schema:
+                format: date-time
+                type: string
+              style: simple
+        "400":
+          description: Invalid username/password supplied
+      summary: Logs user into the system
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/logout:
+    get:
+      operationId: logoutUser
+      responses:
+        default:
+          description: successful operation
+      security:
+      - api_key: []
+      summary: Logs out current logged in user session
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+  /user/{username}:
+    delete:
+      description: This can only be done by the logged in user.
+      operationId: deleteUser
+      parameters:
+      - description: The name that needs to be deleted
+        explode: false
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "400":
+          description: Invalid username supplied
+        "404":
+          description: User not found
+      security:
+      - api_key: []
+      summary: Delete user
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+    get:
+      operationId: getUserByName
+      parameters:
+      - description: The name that needs to be fetched. Use user1 for testing.
+        explode: false
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            application/xml:
+              schema:
+                $ref: '#/components/schemas/User'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/User'
+          description: successful operation
+        "400":
+          description: Invalid username supplied
+        "404":
+          description: User not found
+      summary: Get user by user name
+      tags:
+      - user
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+    put:
+      description: This can only be done by the logged in user.
+      operationId: updateUser
+      parameters:
+      - description: name that need to be deleted
+        explode: false
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+        style: simple
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/User'
+        description: Updated user object
+        required: true
+      responses:
+        "400":
+          description: Invalid user supplied
+        "404":
+          description: User not found
+      security:
+      - api_key: []
+      summary: Updated user
+      tags:
+      - user
+      x-contentType: application/json
+      x-accepts: application/json
+      x-tags:
+      - tag: user
+components:
+  requestBodies:
+    UserArray:
+      content:
+        application/json:
+          schema:
+            items:
+              $ref: '#/components/schemas/User'
+            type: array
+      description: List of user object
+      required: true
+    Pet:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/Pet'
+        application/xml:
+          schema:
+            $ref: '#/components/schemas/Pet'
+      description: Pet object that needs to be added to the store
+      required: true
+    inline_object:
+      content:
+        application/x-www-form-urlencoded:
+          schema:
+            $ref: '#/components/schemas/inline_object'
+    inline_object_1:
+      content:
+        multipart/form-data:
+          schema:
+            $ref: '#/components/schemas/inline_object_1'
+  schemas:
+    Order:
+      description: An order for a pets from the pet store
+      example:
+        petId: 6
+        quantity: 1
+        id: 0
+        shipDate: 2000-01-23T04:56:07.000+00:00
+        complete: false
+        status: placed
+      properties:
+        id:
+          format: int64
+          type: integer
+        petId:
+          format: int64
+          type: integer
+        quantity:
+          format: int32
+          type: integer
+        shipDate:
+          format: date-time
+          type: string
+        status:
+          description: Order Status
+          enum:
+          - placed
+          - approved
+          - delivered
+          type: string
+        complete:
+          default: false
+          type: boolean
+      title: Pet Order
+      type: object
+      xml:
+        name: Order
+    Category:
+      description: A category for a pet
+      example:
+        name: name
+        id: 6
+      properties:
+        id:
+          format: int64
+          type: integer
+        name:
+          pattern: ^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$
+          type: string
+      title: Pet category
+      type: object
+      xml:
+        name: Category
+    User:
+      description: A User who is purchasing from the pet store
+      example:
+        firstName: firstName
+        lastName: lastName
+        password: password
+        userStatus: 6
+        phone: phone
+        id: 0
+        email: email
+        username: username
+      properties:
+        id:
+          format: int64
+          type: integer
+        username:
+          type: string
+        firstName:
+          type: string
+        lastName:
+          type: string
+        email:
+          type: string
+        password:
+          type: string
+        phone:
+          type: string
+        userStatus:
+          description: User Status
+          format: int32
+          type: integer
+      title: a User
+      type: object
+      xml:
+        name: User
+    Tag:
+      description: A tag for a pet
+      example:
+        name: name
+        id: 1
+      properties:
+        id:
+          format: int64
+          type: integer
+        name:
+          type: string
+      title: Pet Tag
+      type: object
+      xml:
+        name: Tag
+    Pet:
+      description: A pet for sale in the pet store
+      example:
+        photoUrls:
+        - photoUrls
+        - photoUrls
+        name: doggie
+        id: 0
+        category:
+          name: name
+          id: 6
+        tags:
+        - name: name
+          id: 1
+        - name: name
+          id: 1
+        status: available
+      properties:
+        id:
+          format: int64
+          type: integer
+        category:
+          $ref: '#/components/schemas/Category'
+        name:
+          example: doggie
+          type: string
+        photoUrls:
+          items:
+            type: string
+          type: array
+          xml:
+            name: photoUrl
+            wrapped: true
+        tags:
+          items:
+            $ref: '#/components/schemas/Tag'
+          type: array
+          xml:
+            name: tag
+            wrapped: true
+        status:
+          deprecated: true
+          description: pet status in the store
+          enum:
+          - available
+          - pending
+          - sold
+          type: string
+      required:
+      - name
+      - photoUrls
+      title: a Pet
+      type: object
+      xml:
+        name: Pet
+    ApiResponse:
+      description: Describes the result of uploading an image resource
+      example:
+        code: 0
+        type: type
+        message: message
+      properties:
+        code:
+          format: int32
+          type: integer
+        type:
+          type: string
+        message:
+          type: string
+      title: An uploaded response
+      type: object
+    inline_object:
+      properties:
+        name:
+          description: Updated name of the pet
+          type: string
+        status:
+          description: Updated status of the pet
+          type: string
+      type: object
+    inline_object_1:
+      properties:
+        additionalMetadata:
+          description: Additional data to pass to server
+          type: string
+        file:
+          description: file to upload
+          format: binary
+          type: string
+      type: object
+  securitySchemes:
+    petstore_auth:
+      flows:
+        implicit:
+          authorizationUrl: http://petstore.swagger.io/api/oauth/dialog
+          scopes:
+            write:pets: modify pets in your account
+            read:pets: read your pets
+      type: oauth2
+    api_key:
+      in: header
+      name: api_key
+      type: apiKey
diff --git a/samples/schema/petstore/ktorm/.openapi-generator/VERSION b/samples/schema/petstore/ktorm/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/schema/petstore/ktorm/.openapi-generator/VERSION
+++ b/samples/schema/petstore/ktorm/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/schema/petstore/mysql/.openapi-generator/VERSION b/samples/schema/petstore/mysql/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/schema/petstore/mysql/.openapi-generator/VERSION
+++ b/samples/schema/petstore/mysql/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/schema/petstore/wsdl-schema/.openapi-generator/VERSION b/samples/schema/petstore/wsdl-schema/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/schema/petstore/wsdl-schema/.openapi-generator/VERSION
+++ b/samples/schema/petstore/wsdl-schema/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION
+++ b/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION
+++ b/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION
+++ b/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION
+++ b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION b/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION
+++ b/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/cpp-qt-qhttpengine-server/.openapi-generator/VERSION b/samples/server/petstore/cpp-qt-qhttpengine-server/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/cpp-qt-qhttpengine-server/.openapi-generator/VERSION
+++ b/samples/server/petstore/cpp-qt-qhttpengine-server/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/erlang-server/.openapi-generator/VERSION b/samples/server/petstore/erlang-server/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/erlang-server/.openapi-generator/VERSION
+++ b/samples/server/petstore/erlang-server/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/go-api-server/.openapi-generator/VERSION b/samples/server/petstore/go-api-server/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/go-api-server/.openapi-generator/VERSION
+++ b/samples/server/petstore/go-api-server/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/go-chi-server/.openapi-generator/VERSION b/samples/server/petstore/go-chi-server/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/go-chi-server/.openapi-generator/VERSION
+++ b/samples/server/petstore/go-chi-server/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/go-echo-server/.openapi-generator/VERSION b/samples/server/petstore/go-echo-server/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/go-echo-server/.openapi-generator/VERSION
+++ b/samples/server/petstore/go-echo-server/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/go-gin-api-server/.openapi-generator/VERSION b/samples/server/petstore/go-gin-api-server/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/go-gin-api-server/.openapi-generator/VERSION
+++ b/samples/server/petstore/go-gin-api-server/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/go-server-required/.openapi-generator/VERSION b/samples/server/petstore/go-server-required/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/go-server-required/.openapi-generator/VERSION
+++ b/samples/server/petstore/go-server-required/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/haskell-servant/.openapi-generator/VERSION b/samples/server/petstore/haskell-servant/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/haskell-servant/.openapi-generator/VERSION
+++ b/samples/server/petstore/haskell-servant/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/haskell-yesod/.openapi-generator/VERSION b/samples/server/petstore/haskell-yesod/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/haskell-yesod/.openapi-generator/VERSION
+++ b/samples/server/petstore/haskell-yesod/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-msf4j/.openapi-generator/VERSION b/samples/server/petstore/java-msf4j/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-msf4j/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-msf4j/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-play-framework-no-nullable/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-nullable/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-play-framework-no-nullable/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-play-framework-no-nullable/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-play-framework/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-play-framework/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-play-framework/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-undertow/.openapi-generator/VERSION b/samples/server/petstore/java-undertow/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-undertow/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-undertow/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION b/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION
+++ b/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-cxf-non-spring-app/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf-non-spring-app/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-cxf-non-spring-app/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-cxf-non-spring-app/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-resteasy/default-value/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/default-value/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-resteasy/default-value/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-resteasy/default-value/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-resteasy/default/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/default/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-resteasy/default/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-resteasy/default/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-resteasy/eap-java8/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/eap-java8/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-resteasy/eap-java8/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-resteasy/eap-java8/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-resteasy/java8/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/java8/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-resteasy/java8/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-resteasy/java8/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-spec-interface/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-spec-interface/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-spec-interface/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-spec-interface/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION b/samples/server/petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs/jersey1/.openapi-generator/VERSION b/samples/server/petstore/jaxrs/jersey1/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs/jersey1/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs/jersey1/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION b/samples/server/petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/jaxrs/jersey2/.openapi-generator/VERSION b/samples/server/petstore/jaxrs/jersey2/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/jaxrs/jersey2/.openapi-generator/VERSION
+++ b/samples/server/petstore/jaxrs/jersey2/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/kotlin-server/ktor/.openapi-generator/VERSION b/samples/server/petstore/kotlin-server/ktor/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/kotlin-server/ktor/.openapi-generator/VERSION
+++ b/samples/server/petstore/kotlin-server/ktor/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/kotlin-server/ktor/README.md b/samples/server/petstore/kotlin-server/ktor/README.md
index e47cdeb550ceb5a420ac4e7d1bc5ba6f6376315e..ad9008bc0dd14d52d8e5045004139412898ce884 100644
--- a/samples/server/petstore/kotlin-server/ktor/README.md
+++ b/samples/server/petstore/kotlin-server/ktor/README.md
@@ -2,7 +2,7 @@
 
 This is a sample server Petstore server. For this sample, you can use the api key &#x60;special-key&#x60; to test the authorization filters.
 
-Generated by OpenAPI Generator 5.3.1.
+Generated by OpenAPI Generator 5.4.0-SNAPSHOT.
 
 ## Requires
 
diff --git a/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION b/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION
+++ b/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
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
index bedd82ad84e9ddaaf090d373deb78cc1239c2bbb..6ddbe5583e49a866044644bddd6734bea32c1e54 100644
--- 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
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
 */
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
index 8ce2645e4d619beb247166a93d8781c8fe736a9c..8bb9e405c31f26501defb2b15c6f1ea07606f484 100644
--- 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
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
 */
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
index bb608e5c66d8c98137d2dcd8e5ce90dad96c8f6c..d1be9a9efed71700b7995e62024ed6eae82ba951 100644
--- 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
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
 */
diff --git a/samples/server/petstore/kotlin-springboot-modelMutable/.openapi-generator/VERSION b/samples/server/petstore/kotlin-springboot-modelMutable/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/kotlin-springboot-modelMutable/.openapi-generator/VERSION
+++ b/samples/server/petstore/kotlin-springboot-modelMutable/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/kotlin-springboot-reactive/.openapi-generator/VERSION b/samples/server/petstore/kotlin-springboot-reactive/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/kotlin-springboot-reactive/.openapi-generator/VERSION
+++ b/samples/server/petstore/kotlin-springboot-reactive/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/kotlin-springboot/.openapi-generator/VERSION b/samples/server/petstore/kotlin-springboot/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/kotlin-springboot/.openapi-generator/VERSION
+++ b/samples/server/petstore/kotlin-springboot/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/kotlin/vertx/.openapi-generator/VERSION b/samples/server/petstore/kotlin/vertx/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/kotlin/vertx/.openapi-generator/VERSION
+++ b/samples/server/petstore/kotlin/vertx/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/php-laravel/.openapi-generator/VERSION b/samples/server/petstore/php-laravel/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/php-laravel/.openapi-generator/VERSION
+++ b/samples/server/petstore/php-laravel/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/php-lumen/.openapi-generator/VERSION b/samples/server/petstore/php-lumen/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/php-lumen/.openapi-generator/VERSION
+++ b/samples/server/petstore/php-lumen/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/php-mezzio-ph-modern/.openapi-generator/VERSION b/samples/server/petstore/php-mezzio-ph-modern/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/php-mezzio-ph-modern/.openapi-generator/VERSION
+++ b/samples/server/petstore/php-mezzio-ph-modern/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/php-mezzio-ph/.openapi-generator/VERSION b/samples/server/petstore/php-mezzio-ph/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/php-mezzio-ph/.openapi-generator/VERSION
+++ b/samples/server/petstore/php-mezzio-ph/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/php-slim4/.openapi-generator/VERSION b/samples/server/petstore/php-slim4/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/php-slim4/.openapi-generator/VERSION
+++ b/samples/server/petstore/php-slim4/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/.openapi-generator/VERSION b/samples/server/petstore/php-symfony/SymfonyBundle-php/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/php-symfony/SymfonyBundle-php/.openapi-generator/VERSION
+++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/python-aiohttp-srclayout/.openapi-generator/VERSION b/samples/server/petstore/python-aiohttp-srclayout/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/python-aiohttp-srclayout/.openapi-generator/VERSION
+++ b/samples/server/petstore/python-aiohttp-srclayout/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/python-aiohttp/.openapi-generator/VERSION b/samples/server/petstore/python-aiohttp/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/python-aiohttp/.openapi-generator/VERSION
+++ b/samples/server/petstore/python-aiohttp/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/python-blueplanet/.openapi-generator/VERSION b/samples/server/petstore/python-blueplanet/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/python-blueplanet/.openapi-generator/VERSION
+++ b/samples/server/petstore/python-blueplanet/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/python-fastapi/.openapi-generator/VERSION b/samples/server/petstore/python-fastapi/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/python-fastapi/.openapi-generator/VERSION
+++ b/samples/server/petstore/python-fastapi/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/python-flask/.openapi-generator/VERSION b/samples/server/petstore/python-flask/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/python-flask/.openapi-generator/VERSION
+++ b/samples/server/petstore/python-flask/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/rust-server/output/multipart-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/multipart-v3/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/rust-server/output/multipart-v3/.openapi-generator/VERSION
+++ b/samples/server/petstore/rust-server/output/multipart-v3/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/rust-server/output/no-example-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/no-example-v3/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/rust-server/output/no-example-v3/.openapi-generator/VERSION
+++ b/samples/server/petstore/rust-server/output/no-example-v3/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/rust-server/output/openapi-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/openapi-v3/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/rust-server/output/openapi-v3/.openapi-generator/VERSION
+++ b/samples/server/petstore/rust-server/output/openapi-v3/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/rust-server/output/ops-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/ops-v3/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/rust-server/output/ops-v3/.openapi-generator/VERSION
+++ b/samples/server/petstore/rust-server/output/ops-v3/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/rust-server/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/rust-server/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION
+++ b/samples/server/petstore/rust-server/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/rust-server/output/ping-bearer-auth/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/ping-bearer-auth/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/rust-server/output/ping-bearer-auth/.openapi-generator/VERSION
+++ b/samples/server/petstore/rust-server/output/ping-bearer-auth/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/rust-server/output/rust-server-test/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/rust-server-test/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/rust-server/output/rust-server-test/.openapi-generator/VERSION
+++ b/samples/server/petstore/rust-server/output/rust-server-test/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/spring-mvc-default-value/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-default-value/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/spring-mvc-default-value/.openapi-generator/VERSION
+++ b/samples/server/petstore/spring-mvc-default-value/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/spring-mvc-default-value/pom.xml b/samples/server/petstore/spring-mvc-default-value/pom.xml
index fa8da51ae2daba2c7aeecfcfbef8c0ff300cec10..dc8d196bfaf223292fe9eb10fc6d7b1d83997c6b 100644
--- a/samples/server/petstore/spring-mvc-default-value/pom.xml
+++ b/samples/server/petstore/spring-mvc-default-value/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,16 +38,17 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
@@ -63,12 +57,12 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestHeadersApi.java b/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestHeadersApi.java
index 11418534677f31d29ba189e052276f4f80aa1c9c..f4cc86e3817cd68a93dc29b90c9bfee70888162c 100644
--- a/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestHeadersApi.java
+++ b/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestHeadersApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -42,29 +42,29 @@ public interface TestHeadersApi {
      * @param headerBoolean  (optional, default to true)
      * @return default response (status code 200)
      */
-
-    @ApiOperation(value = "test headers", nickname = "headersTest", notes = "desc", response = TestResponse.class, tags={ "verify-default-value", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "default response", response = TestResponse.class) })
+    @ApiOperation(
+        tags = { "verify-default-value" },
+        value = "test headers",
+        nickname = "headersTest",
+        notes = "desc",
+        response = TestResponse.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "default response", response = TestResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/test-headers",
         produces = { "application/json" }
     )
     default ResponseEntity<TestResponse> headersTest(
-@ApiParam(value = "", defaultValue = "11.2") @RequestHeader(value = "headerNumber", required = false) BigDecimal headerNumber
-,
-@ApiParam(value = "", defaultValue = "qwerty") @RequestHeader(value = "headerString", required = false) String headerString
-,
-@ApiParam(value = "", defaultValue = "qwerty") @RequestHeader(value = "headerStringWrapped", required = false) String headerStringWrapped
-,
-@ApiParam(value = "", defaultValue = "qwerty\"with quotes\" test") @RequestHeader(value = "headerStringQuotes", required = false) String headerStringQuotes
-,
-@ApiParam(value = "", defaultValue = "qwerty\"with quotes\" test") @RequestHeader(value = "headerStringQuotesWrapped", required = false) String headerStringQuotesWrapped
-,
-@ApiParam(value = "", defaultValue = "true") @RequestHeader(value = "headerBoolean", required = false) Boolean headerBoolean
-) {
+        @ApiParam(value = "", defaultValue = "11.2") @RequestHeader(value = "headerNumber", required = false) BigDecimal headerNumber,
+        @ApiParam(value = "", defaultValue = "qwerty") @RequestHeader(value = "headerString", required = false) String headerString,
+        @ApiParam(value = "", defaultValue = "qwerty") @RequestHeader(value = "headerStringWrapped", required = false) String headerStringWrapped,
+        @ApiParam(value = "", defaultValue = "qwerty\"with quotes\" test") @RequestHeader(value = "headerStringQuotes", required = false) String headerStringQuotes,
+        @ApiParam(value = "", defaultValue = "qwerty\"with quotes\" test") @RequestHeader(value = "headerStringQuotesWrapped", required = false) String headerStringQuotesWrapped,
+        @ApiParam(value = "", defaultValue = "true") @RequestHeader(value = "headerBoolean", required = false) Boolean headerBoolean
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestQueryParamsApi.java b/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestQueryParamsApi.java
index 81423f590bde2fc0b958675be2000888db20858e..208840a0b0564c3ca6e150eba378a4bd81ce112e 100644
--- a/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestQueryParamsApi.java
+++ b/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestQueryParamsApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -42,29 +42,29 @@ public interface TestQueryParamsApi {
      * @param queryBoolean  (optional, default to true)
      * @return default response (status code 200)
      */
-
-    @ApiOperation(value = "test query params", nickname = "queryParamsTest", notes = "desc", response = TestResponse.class, tags={ "verify-default-value", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "default response", response = TestResponse.class) })
+    @ApiOperation(
+        tags = { "verify-default-value" },
+        value = "test query params",
+        nickname = "queryParamsTest",
+        notes = "desc",
+        response = TestResponse.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "default response", response = TestResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/test-query-params",
         produces = { "application/json" }
     )
-    default ResponseEntity<TestResponse> queryParamsTest(@ApiParam(value = "", defaultValue = "11.2") @Valid @RequestParam(value = "queryNumber", required = false, defaultValue = "11.2") BigDecimal queryNumber
-
-,@ApiParam(value = "", defaultValue = "qwerty") @Valid @RequestParam(value = "queryString", required = false, defaultValue = "qwerty") String queryString
-
-,@ApiParam(value = "", defaultValue = "qwerty") @Valid @RequestParam(value = "queryStringWrapped", required = false, defaultValue = "qwerty") String queryStringWrapped
-
-,@ApiParam(value = "", defaultValue = "qwerty\"with quotes\" test") @Valid @RequestParam(value = "queryStringQuotes", required = false, defaultValue = "qwerty\"with quotes\" test") String queryStringQuotes
-
-,@ApiParam(value = "", defaultValue = "qwerty\"with quotes\" test") @Valid @RequestParam(value = "queryStringQuotesWrapped", required = false, defaultValue = "qwerty\"with quotes\" test") String queryStringQuotesWrapped
-
-,@ApiParam(value = "", defaultValue = "true") @Valid @RequestParam(value = "queryBoolean", required = false, defaultValue = "true") Boolean queryBoolean
-
-) {
+    default ResponseEntity<TestResponse> queryParamsTest(
+        @ApiParam(value = "", defaultValue = "11.2") @Valid @RequestParam(value = "queryNumber", required = false, defaultValue = "11.2") BigDecimal queryNumber,
+        @ApiParam(value = "", defaultValue = "qwerty") @Valid @RequestParam(value = "queryString", required = false, defaultValue = "qwerty") String queryString,
+        @ApiParam(value = "", defaultValue = "qwerty") @Valid @RequestParam(value = "queryStringWrapped", required = false, defaultValue = "qwerty") String queryStringWrapped,
+        @ApiParam(value = "", defaultValue = "qwerty\"with quotes\" test") @Valid @RequestParam(value = "queryStringQuotes", required = false, defaultValue = "qwerty\"with quotes\" test") String queryStringQuotes,
+        @ApiParam(value = "", defaultValue = "qwerty\"with quotes\" test") @Valid @RequestParam(value = "queryStringQuotesWrapped", required = false, defaultValue = "qwerty\"with quotes\" test") String queryStringQuotesWrapped,
+        @ApiParam(value = "", defaultValue = "true") @Valid @RequestParam(value = "queryBoolean", required = false, defaultValue = "true") Boolean queryBoolean
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-j8-async/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-j8-async/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/spring-mvc-j8-async/.openapi-generator/VERSION
+++ b/samples/server/petstore/spring-mvc-j8-async/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/spring-mvc-j8-async/pom.xml b/samples/server/petstore/spring-mvc-j8-async/pom.xml
index 75642d4fca41642428e2ec2a90b6a3b119759c13..9308a10db9d3446d0dadda214bbc5dfefb437246 100644
--- a/samples/server/petstore/spring-mvc-j8-async/pom.xml
+++ b/samples/server/petstore/spring-mvc-j8-async/pom.xml
@@ -166,17 +166,18 @@
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
         <jakarta-annotation-version>1.3.5</jakarta-annotation-version>
-    	<jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
+    	  <jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
         <jetty-version>9.2.15.v20160210</jetty-version>
         <slf4j-version>1.7.21</slf4j-version>
         <junit-version>4.13.1</junit-version>
         <servlet-api-version>4.0.4</servlet-api-version>
-        <springfox-version>2.8.0</springfox-version>
+        <springfox-version>2.9.2</springfox-version>
         <jackson-version>2.9.9</jackson-version>
         <jackson-threetenbp-version>2.8.4</jackson-threetenbp-version>
         <beanvalidation-version>2.0.2</beanvalidation-version>
         <spring-version>4.3.20.RELEASE</spring-version>
         <jackson-databind-nullable-version>0.2.2</jackson-databind-nullable-version>
         <jackson-databind-version>2.9.8</jackson-databind-version>
+        <swagger-core-version>1.6.3</swagger-core-version>
     </properties>
 </project>
diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 9013faa9cb7a61ea08615eb1e54994bdd04266c3..57027ab454f940c4d25cba641bc30c23bb110f78 100644
--- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -37,11 +37,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -49,8 +54,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default CompletableFuture<ResponseEntity<Client>> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return CompletableFuture.supplyAsync(()-> {
             getRequest().ifPresent(request -> {
                 for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java
index 1d0035e021dd462441eac1482e79b02063f79749..5481edab7a7256fe283a88196b682572aa42eb95 100644
--- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -46,19 +46,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default CompletableFuture<ResponseEntity<Void>> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -71,19 +75,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default CompletableFuture<ResponseEntity<Boolean>> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -96,19 +105,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default CompletableFuture<ResponseEntity<OuterComposite>> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         return CompletableFuture.supplyAsync(()-> {
             getRequest().ifPresent(request -> {
                 for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
@@ -132,19 +146,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default CompletableFuture<ResponseEntity<BigDecimal>> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -157,19 +176,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default CompletableFuture<ResponseEntity<String>> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -182,19 +206,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default CompletableFuture<ResponseEntity<Void>> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -207,21 +235,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default CompletableFuture<ResponseEntity<Void>> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default CompletableFuture<ResponseEntity<Void>> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -234,11 +265,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -246,8 +282,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default CompletableFuture<ResponseEntity<Client>> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return CompletableFuture.supplyAsync(()-> {
             getRequest().ifPresent(request -> {
                 for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
@@ -285,50 +321,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default CompletableFuture<ResponseEntity<Void>> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -349,35 +375,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default CompletableFuture<ResponseEntity<Void>> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -395,28 +417,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default CompletableFuture<ResponseEntity<Void>> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default CompletableFuture<ResponseEntity<Void>> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -428,19 +449,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default CompletableFuture<ResponseEntity<Void>> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -453,21 +478,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default CompletableFuture<ResponseEntity<Void>> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -484,26 +512,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default CompletableFuture<ResponseEntity<Void>> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default CompletableFuture<ResponseEntity<Void>> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -517,28 +545,33 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default CompletableFuture<ResponseEntity<ModelApiResponse>> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default CompletableFuture<ResponseEntity<ModelApiResponse>> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         return CompletableFuture.supplyAsync(()-> {
             getRequest().ifPresent(request -> {
                 for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 557a43e1d43633687f7fd70bb3ef628125696d8b..4d7d81f1a1b54aec275195ef68695b99c6eb3d1c 100644
--- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -37,14 +37,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -52,8 +57,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default CompletableFuture<ResponseEntity<Client>> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return CompletableFuture.supplyAsync(()-> {
             getRequest().ifPresent(request -> {
                 for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/PetApi.java
index 161749430ff9057196f0fdec7ab1d70bb9bc42d1..22c715f84ef6f130c7e584f9be12cd754f47cf9f 100644
--- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -39,25 +39,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default CompletableFuture<ResponseEntity<Void>> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -71,26 +76,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default CompletableFuture<ResponseEntity<Void>> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default CompletableFuture<ResponseEntity<Void>> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -104,25 +113,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default CompletableFuture<ResponseEntity<List<Pet>>> 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) List<String> status
-
-) {
+    default CompletableFuture<ResponseEntity<List<Pet>>> 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) List<String> status
+    ) {
         return CompletableFuture.supplyAsync(()-> {
             getRequest().ifPresent(request -> {
                 for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
@@ -153,25 +169,32 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default CompletableFuture<ResponseEntity<Set<Pet>>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-) {
+    default CompletableFuture<ResponseEntity<Set<Pet>>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
         return CompletableFuture.supplyAsync(()-> {
             getRequest().ifPresent(request -> {
                 for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
@@ -202,26 +225,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default CompletableFuture<ResponseEntity<Pet>> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default CompletableFuture<ResponseEntity<Pet>> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         return CompletableFuture.supplyAsync(()-> {
             getRequest().ifPresent(request -> {
                 for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
@@ -252,29 +278,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default CompletableFuture<ResponseEntity<Void>> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -288,27 +317,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default CompletableFuture<ResponseEntity<Void>> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default CompletableFuture<ResponseEntity<Void>> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -322,28 +355,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default CompletableFuture<ResponseEntity<ModelApiResponse>> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default CompletableFuture<ResponseEntity<ModelApiResponse>> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         return CompletableFuture.supplyAsync(()-> {
             getRequest().ifPresent(request -> {
                 for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/StoreApi.java
index d9c5e3c16e8e6eeacdbd1c8ba4819f2d8977917f..f3637cae181f664e9aed950cbcfa432aa2645aa6 100644
--- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -39,20 +39,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default CompletableFuture<ResponseEntity<Void>> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default CompletableFuture<ResponseEntity<Void>> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -64,20 +67,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default CompletableFuture<ResponseEntity<Map<String, Integer>>> getInventory() {
+    default CompletableFuture<ResponseEntity<Map<String, Integer>>> getInventory(
+        
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -92,23 +103,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default CompletableFuture<ResponseEntity<Order>> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default CompletableFuture<ResponseEntity<Order>> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         return CompletableFuture.supplyAsync(()-> {
             getRequest().ifPresent(request -> {
                 for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
@@ -137,21 +151,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default CompletableFuture<ResponseEntity<Order>> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         return CompletableFuture.supplyAsync(()-> {
             getRequest().ifPresent(request -> {
                 for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/UserApi.java
index a2065f673a2f011175016947ffbd0fbc4c3e94fd..1293676616e2a45d301c6ed93a8954cd8cb4f041 100644
--- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -39,18 +39,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default CompletableFuture<ResponseEntity<Void>> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -62,18 +66,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default CompletableFuture<ResponseEntity<Void>> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -85,18 +93,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default CompletableFuture<ResponseEntity<Void>> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -110,20 +122,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default CompletableFuture<ResponseEntity<Void>> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default CompletableFuture<ResponseEntity<Void>> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -137,23 +152,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default CompletableFuture<ResponseEntity<User>> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default CompletableFuture<ResponseEntity<User>> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         return CompletableFuture.supplyAsync(()-> {
             getRequest().ifPresent(request -> {
                 for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
@@ -183,23 +201,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default CompletableFuture<ResponseEntity<String>> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default CompletableFuture<ResponseEntity<String>> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -210,16 +231,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default CompletableFuture<ResponseEntity<Void>> logoutUser() {
+    default CompletableFuture<ResponseEntity<Void>> logoutUser(
+        
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
@@ -234,22 +261,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default CompletableFuture<ResponseEntity<Void>> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default CompletableFuture<ResponseEntity<Void>> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return CompletableFuture.completedFuture(new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED));
 
     }
diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-j8-localdatetime/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/spring-mvc-j8-localdatetime/.openapi-generator/VERSION
+++ b/samples/server/petstore/spring-mvc-j8-localdatetime/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/pom.xml b/samples/server/petstore/spring-mvc-j8-localdatetime/pom.xml
index 869d354af92ae6f9d9ba4aae50ecb421e88052e5..f14a30570c919508ded204c90b8383634a9dbfb8 100644
--- a/samples/server/petstore/spring-mvc-j8-localdatetime/pom.xml
+++ b/samples/server/petstore/spring-mvc-j8-localdatetime/pom.xml
@@ -166,17 +166,18 @@
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
         <jakarta-annotation-version>1.3.5</jakarta-annotation-version>
-    	<jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
+    	  <jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
         <jetty-version>9.2.15.v20160210</jetty-version>
         <slf4j-version>1.7.21</slf4j-version>
         <junit-version>4.13.1</junit-version>
         <servlet-api-version>4.0.4</servlet-api-version>
-        <springfox-version>2.8.0</springfox-version>
+        <springfox-version>2.9.2</springfox-version>
         <jackson-version>2.9.9</jackson-version>
         <jackson-threetenbp-version>2.8.4</jackson-threetenbp-version>
         <beanvalidation-version>2.0.2</beanvalidation-version>
         <spring-version>4.3.20.RELEASE</spring-version>
         <jackson-databind-nullable-version>0.2.2</jackson-databind-nullable-version>
         <jackson-databind-version>2.9.8</jackson-databind-version>
+        <swagger-core-version>1.6.3</swagger-core-version>
     </properties>
 </project>
diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 57e6c1d106723c45b01180e045a869a033abdf86..1667ef188aebc17f0a38b00f1a1db6c3a7172b83 100644
--- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,11 +36,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -48,8 +53,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java
index ba64ef318812761e3d1a8bee6ac0e31d2eb0b3a2..bc0af05b90fea2366b06fb299a2577a7d94e2855 100644
--- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -45,19 +45,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,19 +74,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -95,19 +104,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
@@ -129,19 +143,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -154,19 +173,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -179,19 +203,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -204,21 +232,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,11 +262,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -243,8 +279,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -280,50 +316,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) LocalDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) LocalDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -344,35 +370,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -390,28 +412,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -423,19 +444,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -448,21 +473,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -479,26 +507,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -512,28 +540,33 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 8b45339424f3c1d09282ff831e330a64d523b014..e2459cc308c617de7280b228738e8639282ebf6d 100644
--- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,14 +36,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -51,8 +56,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/PetApi.java
index 693ce02c51e9754b69e6fca2013f025a95524687..e969bf667650a1e19e0b45b3a4be642a70ddff72 100644
--- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,25 +38,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,26 +75,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -103,25 +112,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-) {
+    default ResponseEntity<List<Pet>> 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) List<String> status
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -150,25 +166,32 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Set<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-) {
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -197,26 +220,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -245,29 +271,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -281,27 +310,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -315,28 +348,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/StoreApi.java
index d3a44c4e9c6763f98967d7bde447d0bf44e80a0f..19ab0bb614b675db53fe2de3cd170cd371169660 100644
--- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,20 +38,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -63,20 +66,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -91,23 +102,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -134,21 +148,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/UserApi.java
index 598ae5ad88c3e1216887c9e852ebdafb888faae8..9ab7a9c21f56c5ea7af7e0af8276fb44c571f0a8 100644
--- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,18 +38,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -61,18 +65,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -84,18 +92,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -109,20 +121,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -136,23 +151,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -180,23 +198,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -207,16 +228,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,22 +258,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
diff --git a/samples/server/petstore/spring-mvc-no-nullable/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-no-nullable/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/spring-mvc-no-nullable/.openapi-generator/VERSION
+++ b/samples/server/petstore/spring-mvc-no-nullable/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/spring-mvc-no-nullable/pom.xml b/samples/server/petstore/spring-mvc-no-nullable/pom.xml
index 126e6408ffcbcd68a444d6ab23ce4b7f6c2b03b5..4c44170eca32ccc83dd1c649eec97bb99cb9f08c 100644
--- a/samples/server/petstore/spring-mvc-no-nullable/pom.xml
+++ b/samples/server/petstore/spring-mvc-no-nullable/pom.xml
@@ -161,16 +161,17 @@
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
         <jakarta-annotation-version>1.3.5</jakarta-annotation-version>
-    	<jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
+    	  <jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
         <jetty-version>9.2.15.v20160210</jetty-version>
         <slf4j-version>1.7.21</slf4j-version>
         <junit-version>4.13.1</junit-version>
         <servlet-api-version>4.0.4</servlet-api-version>
-        <springfox-version>2.8.0</springfox-version>
+        <springfox-version>2.9.2</springfox-version>
         <jackson-version>2.9.9</jackson-version>
         <jackson-threetenbp-version>2.8.4</jackson-threetenbp-version>
         <beanvalidation-version>2.0.2</beanvalidation-version>
         <spring-version>4.3.20.RELEASE</spring-version>
         <jackson-databind-version>2.9.8</jackson-databind-version>
+        <swagger-core-version>1.6.3</swagger-core-version>
     </properties>
 </project>
diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 57e6c1d106723c45b01180e045a869a033abdf86..1667ef188aebc17f0a38b00f1a1db6c3a7172b83 100644
--- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,11 +36,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -48,8 +53,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeApi.java
index dfa1803e162df32ef6defef5e87cf40582a28fa5..71ffda67b0c260df3701011681b7279bbc11f5da 100644
--- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -45,19 +45,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,19 +74,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -95,19 +104,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
@@ -129,19 +143,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -154,19 +173,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -179,19 +203,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -204,21 +232,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,11 +262,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -243,8 +279,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -280,50 +316,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -344,35 +370,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -390,28 +412,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -423,19 +444,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -448,21 +473,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -479,26 +507,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -512,28 +540,33 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 8b45339424f3c1d09282ff831e330a64d523b014..e2459cc308c617de7280b228738e8639282ebf6d 100644
--- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,14 +36,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -51,8 +56,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/PetApi.java
index 693ce02c51e9754b69e6fca2013f025a95524687..e969bf667650a1e19e0b45b3a4be642a70ddff72 100644
--- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,25 +38,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,26 +75,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -103,25 +112,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-) {
+    default ResponseEntity<List<Pet>> 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) List<String> status
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -150,25 +166,32 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Set<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-) {
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -197,26 +220,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -245,29 +271,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -281,27 +310,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -315,28 +348,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/StoreApi.java
index d3a44c4e9c6763f98967d7bde447d0bf44e80a0f..19ab0bb614b675db53fe2de3cd170cd371169660 100644
--- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,20 +38,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -63,20 +66,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -91,23 +102,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -134,21 +148,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/UserApi.java
index 743aa88a6d29c2d5635ab5291559c6fa906d98f7..97583359e3b1ff06d9111685d8338f6ba4c5bb21 100644
--- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,18 +38,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -61,18 +65,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -84,18 +92,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -109,20 +121,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -136,23 +151,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -180,23 +198,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -207,16 +228,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,22 +258,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
diff --git a/samples/server/petstore/spring-mvc-spring-pageable/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-spring-pageable/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/spring-mvc-spring-pageable/.openapi-generator/VERSION
+++ b/samples/server/petstore/spring-mvc-spring-pageable/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/spring-mvc-spring-pageable/pom.xml b/samples/server/petstore/spring-mvc-spring-pageable/pom.xml
index 1407e73ebaf095598bb9e4d2def702248e9dffd0..8e4e24b77ae28c9e190847afcd0275e6df0c3d97 100644
--- a/samples/server/petstore/spring-mvc-spring-pageable/pom.xml
+++ b/samples/server/petstore/spring-mvc-spring-pageable/pom.xml
@@ -166,17 +166,18 @@
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
         <jakarta-annotation-version>1.3.5</jakarta-annotation-version>
-    	<jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
+    	  <jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
         <jetty-version>9.2.15.v20160210</jetty-version>
         <slf4j-version>1.7.21</slf4j-version>
         <junit-version>4.13.1</junit-version>
         <servlet-api-version>4.0.4</servlet-api-version>
-        <springfox-version>2.8.0</springfox-version>
+        <springfox-version>2.9.2</springfox-version>
         <jackson-version>2.9.9</jackson-version>
         <jackson-threetenbp-version>2.8.4</jackson-threetenbp-version>
         <beanvalidation-version>2.0.2</beanvalidation-version>
         <spring-version>4.3.20.RELEASE</spring-version>
         <jackson-databind-nullable-version>0.2.2</jackson-databind-nullable-version>
         <jackson-databind-version>2.9.8</jackson-databind-version>
+        <swagger-core-version>1.6.3</swagger-core-version>
     </properties>
 </project>
diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 57e6c1d106723c45b01180e045a869a033abdf86..1667ef188aebc17f0a38b00f1a1db6c3a7172b83 100644
--- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,11 +36,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -48,8 +53,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java
index b494e974feba30a1132245bd88124b77bf689866..14af6c2921083fe3772e45449c0fdf1de82f96b8 100644
--- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -45,19 +45,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,19 +74,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -95,19 +104,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
@@ -129,19 +143,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -154,19 +173,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -179,19 +203,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -204,21 +232,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,11 +262,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -243,8 +279,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -280,50 +316,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -344,35 +370,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -390,28 +412,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -423,19 +444,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -448,21 +473,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -479,26 +507,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -512,28 +540,33 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 8b45339424f3c1d09282ff831e330a64d523b014..e2459cc308c617de7280b228738e8639282ebf6d 100644
--- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,14 +36,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -51,8 +56,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/PetApi.java
index d15f313c4c9e2024dad982a1d0a3dd37b53db117..dc4a8ace4c6f060355d334fda1289ce8b4a5d382 100644
--- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -37,25 +37,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -69,26 +74,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -102,25 +111,33 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-, @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable) {
+    default ResponseEntity<List<Pet>> 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) List<String> status,
+        @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -149,25 +166,33 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
-
-, @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable) {
+    default ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags,
+        @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -196,26 +221,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -244,29 +272,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -280,27 +311,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -314,28 +349,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java
index d3a44c4e9c6763f98967d7bde447d0bf44e80a0f..19ab0bb614b675db53fe2de3cd170cd371169660 100644
--- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,20 +38,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -63,20 +66,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -91,23 +102,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -134,21 +148,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/UserApi.java
index 743aa88a6d29c2d5635ab5291559c6fa906d98f7..97583359e3b1ff06d9111685d8338f6ba4c5bb21 100644
--- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,18 +38,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -61,18 +65,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -84,18 +92,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -109,20 +121,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -136,23 +151,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -180,23 +198,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -207,16 +228,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,22 +258,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
diff --git a/samples/server/petstore/spring-mvc/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/spring-mvc/.openapi-generator/VERSION
+++ b/samples/server/petstore/spring-mvc/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/spring-mvc/pom.xml b/samples/server/petstore/spring-mvc/pom.xml
index 42dc38e182e7d817275276d4185602416d501c90..64dbdca4b957ce08c5005496d8d88a4b6ed7b77c 100644
--- a/samples/server/petstore/spring-mvc/pom.xml
+++ b/samples/server/petstore/spring-mvc/pom.xml
@@ -166,17 +166,18 @@
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
         <jakarta-annotation-version>1.3.5</jakarta-annotation-version>
-    	<jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
+    	  <jakarta.xml.bind-version>2.3.3</jakarta.xml.bind-version>
         <jetty-version>9.2.15.v20160210</jetty-version>
         <slf4j-version>1.7.21</slf4j-version>
         <junit-version>4.13.1</junit-version>
         <servlet-api-version>4.0.4</servlet-api-version>
-        <springfox-version>2.8.0</springfox-version>
+        <springfox-version>2.9.2</springfox-version>
         <jackson-version>2.9.9</jackson-version>
         <jackson-threetenbp-version>2.8.4</jackson-threetenbp-version>
         <beanvalidation-version>2.0.2</beanvalidation-version>
         <spring-version>4.3.20.RELEASE</spring-version>
         <jackson-databind-nullable-version>0.2.2</jackson-databind-nullable-version>
         <jackson-databind-version>2.9.8</jackson-databind-version>
+        <swagger-core-version>1.6.3</swagger-core-version>
     </properties>
 </project>
diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 57e6c1d106723c45b01180e045a869a033abdf86..1667ef188aebc17f0a38b00f1a1db6c3a7172b83 100644
--- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,11 +36,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -48,8 +53,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java
index dfa1803e162df32ef6defef5e87cf40582a28fa5..71ffda67b0c260df3701011681b7279bbc11f5da 100644
--- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -45,19 +45,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,19 +74,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -95,19 +104,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
@@ -129,19 +143,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -154,19 +173,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -179,19 +203,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -204,21 +232,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,11 +262,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -243,8 +279,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -280,50 +316,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -344,35 +370,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -390,28 +412,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -423,19 +444,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -448,21 +473,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -479,26 +507,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -512,28 +540,33 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 8b45339424f3c1d09282ff831e330a64d523b014..e2459cc308c617de7280b228738e8639282ebf6d 100644
--- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,14 +36,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -51,8 +56,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/PetApi.java
index 693ce02c51e9754b69e6fca2013f025a95524687..e969bf667650a1e19e0b45b3a4be642a70ddff72 100644
--- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,25 +38,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,26 +75,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -103,25 +112,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-) {
+    default ResponseEntity<List<Pet>> 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) List<String> status
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -150,25 +166,32 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Set<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-) {
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -197,26 +220,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -245,29 +271,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -281,27 +310,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -315,28 +348,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/StoreApi.java
index d3a44c4e9c6763f98967d7bde447d0bf44e80a0f..19ab0bb614b675db53fe2de3cd170cd371169660 100644
--- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,20 +38,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -63,20 +66,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -91,23 +102,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -134,21 +148,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/UserApi.java
index 743aa88a6d29c2d5635ab5291559c6fa906d98f7..97583359e3b1ff06d9111685d8338f6ba4c5bb21 100644
--- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,18 +38,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -61,18 +65,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -84,18 +92,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -109,20 +121,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -136,23 +151,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -180,23 +198,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -207,16 +228,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,22 +258,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION b/samples/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/pom.xml b/samples/server/petstore/springboot-beanvalidation-no-nullable/pom.xml
index 2c3a945d19160cfa8043d2eb577dec802e8dda38..f865833516e0b277afd45011909b1e18b5d5b10c 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/pom.xml
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.7</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>1.5.12.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,26 +38,27 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.github.joschi.jackson</groupId>
             <artifactId>jackson-datatype-threetenbp</artifactId>
-            <version>2.8.4</version>
+            <version>2.9.10</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 151aa6dc81ddc4f6d32f99468cf97a9cc334d67c..eb4da37da2c4c980245f2b0c01045c65e18d9508 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -28,11 +28,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -40,7 +45,7 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body);
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    );
 
 }
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApiController.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApiController.java
index ec32cf448bff6bec57cfb291fa5f0e26d70512ab..e8f022846bfc259150b97d189601609a43c40ebe 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApiController.java
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApiController.java
@@ -41,8 +41,8 @@ public class AnotherFakeApiController implements AnotherFakeApi {
      * @see AnotherFakeApi#call123testSpecialTags
      */
     public ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"client\" : \"client\" }";
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java
index 0c19151a979cf111400591c9be8ce3ce127b4ecf..ce2e0775f78343c94829cec9be471c0dfdee7dd8 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -37,19 +37,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem);
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    );
 
 
     /**
@@ -59,19 +63,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body);
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    );
 
 
     /**
@@ -81,19 +90,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body);
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    );
 
 
     /**
@@ -103,19 +117,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body);
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    );
 
 
     /**
@@ -125,19 +144,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body);
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    );
 
 
     /**
@@ -147,19 +171,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body);
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    );
 
 
     /**
@@ -169,21 +197,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body);
+    ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    );
 
 
     /**
@@ -193,11 +224,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -205,8 +241,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body);
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    );
 
 
     /**
@@ -230,50 +266,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback);
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    );
 
 
     /**
@@ -291,35 +317,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString);
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    );
 
 
     /**
@@ -334,28 +356,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-);
+    ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    );
 
 
     /**
@@ -364,19 +385,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param);
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    );
 
 
     /**
@@ -386,21 +411,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2);
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    );
 
 
     /**
@@ -414,26 +442,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-);
+    ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    );
 
 
     /**
@@ -444,27 +472,32 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata);
+    ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    );
 
 }
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApiController.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApiController.java
index 227840431fb31f5c9e34f84b92029184c1636d8b..76034668bf3cb38132632ee93191a6d848aeed19 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApiController.java
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApiController.java
@@ -50,8 +50,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#createXmlItem
      */
     public ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -65,8 +65,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#fakeOuterBooleanSerialize
      */
     public ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -80,8 +80,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#fakeOuterCompositeSerialize
      */
     public ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
                 String exampleString = "{ \"my_string\" : \"my_string\", \"my_number\" : 0.8008281904610115, \"my_boolean\" : true }";
@@ -102,8 +102,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#fakeOuterNumberSerialize
      */
     public ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -117,8 +117,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#fakeOuterStringSerialize
      */
     public ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -132,8 +132,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testBodyWithFileSchema
      */
     public ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -146,11 +146,10 @@ public class FakeApiController implements FakeApi {
      * @return Success (status code 200)
      * @see FakeApi#testBodyWithQueryParams
      */
-    public ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    public ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -164,8 +163,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testClientModel
      */
     public ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"client\" : \"client\" }";
@@ -200,34 +199,21 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testEndpointParameters
      */
     public ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -249,22 +235,15 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testEnumParameters
      */
     public ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -282,19 +261,14 @@ public class FakeApiController implements FakeApi {
      * @return Someting wrong (status code 400)
      * @see FakeApi#testGroupParameters
      */
-    public ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    public ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -307,8 +281,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testInlineAdditionalProperties
      */
     public ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -322,10 +296,9 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testJsonFormData
      */
     public ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -342,17 +315,13 @@ public class FakeApiController implements FakeApi {
      * @return Success (status code 200)
      * @see FakeApi#testQueryParameterCollectionFormat
      */
-    public ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    public ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -366,13 +335,11 @@ public class FakeApiController implements FakeApi {
      * @return successful operation (status code 200)
      * @see FakeApi#uploadFileWithRequiredFile
      */
-    public ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    public ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 7f524d7af4ad195513cccbc19ad1237104378832..f482b6bf5ac97754e1cceaba11743d27cded2e27 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -28,14 +28,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -43,7 +48,7 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body);
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    );
 
 }
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
index 80e92bdeaf15b6920d8cac949a5112d4a7dc6000..b705c60d83bba1bd0e6ca57c3bfdcaea83ff79bb 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
@@ -41,8 +41,8 @@ public class FakeClassnameTestApiController implements FakeClassnameTestApi {
      * @see FakeClassnameTestApi#testClassname
      */
     public ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"client\" : \"client\" }";
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java
index 21a559470bae8c91633ac6f0f4ff1bc788ca4b91..f0ab551e4d9fd57f57d0eb84c0ebf7ef9e628466 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -30,25 +30,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body);
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    );
 
 
     /**
@@ -59,26 +64,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-);
+    ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    );
 
 
     /**
@@ -89,25 +98,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<List<Pet>> 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) List<String> status
-
-);
+    ResponseEntity<List<Pet>> 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) List<String> status
+    );
 
 
     /**
@@ -119,25 +135,32 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<Set<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-);
+    ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    );
 
 
     /**
@@ -149,26 +172,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-);
+    ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    );
 
 
     /**
@@ -180,29 +206,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body);
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    );
 
 
     /**
@@ -213,27 +242,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status);
+    ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    );
 
 
     /**
@@ -244,27 +277,32 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file);
+    ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    );
 
 }
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApiController.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApiController.java
index 4905ee8920bd9a46e300db081d496d9bad15cf05..f5625cea3f90ef0e40bb2ab4d3295122ee680a46 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApiController.java
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApiController.java
@@ -43,8 +43,8 @@ public class PetApiController implements PetApi {
      * @see PetApi#addPet
      */
     public ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -58,11 +58,10 @@ public class PetApiController implements PetApi {
      *         or Invalid pet value (status code 400)
      * @see PetApi#deletePet
      */
-    public ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    public ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -76,9 +75,9 @@ public class PetApiController implements PetApi {
      *         or Invalid status value (status code 400)
      * @see PetApi#findPetsByStatus
      */
-    public ResponseEntity<List<Pet>> 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) List<String> status
-
-) {
+    public ResponseEntity<List<Pet>> 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) List<String> status
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
@@ -105,9 +104,9 @@ public class PetApiController implements PetApi {
      * @deprecated
      * @see PetApi#findPetsByTags
      */
-    public ResponseEntity<Set<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-) {
+    public ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
@@ -134,9 +133,9 @@ public class PetApiController implements PetApi {
      *         or Pet not found (status code 404)
      * @see PetApi#getPetById
      */
-    public ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    public ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
@@ -164,8 +163,8 @@ public class PetApiController implements PetApi {
      * @see PetApi#updatePet
      */
     public ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -179,13 +178,11 @@ public class PetApiController implements PetApi {
      * @return Invalid input (status code 405)
      * @see PetApi#updatePetWithForm
      */
-    public ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    public ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -199,13 +196,11 @@ public class PetApiController implements PetApi {
      * @return successful operation (status code 200)
      * @see PetApi#uploadFile
      */
-    public ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    public ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java
index 25b01491b5077f8caf5f37e8336cb1453f96fc5d..cb72ccb357fd5bd8b4770f376faf8d7c23975b11 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -30,20 +30,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-);
+    ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    );
 
 
     /**
@@ -52,20 +55,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    ResponseEntity<Map<String, Integer>> getInventory();
+    ResponseEntity<Map<String, Integer>> getInventory(
+        
+    );
 
 
     /**
@@ -77,23 +88,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-);
+    ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    );
 
 
     /**
@@ -103,20 +117,24 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body);
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    );
 
 }
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApiController.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApiController.java
index 3922137098252cdfc95570fdfebc982aa92f9878..203faf80f73ca34ff5f7086614c3b8f7fad70a2d 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApiController.java
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApiController.java
@@ -42,9 +42,9 @@ public class StoreApiController implements StoreApi {
      *         or Order not found (status code 404)
      * @see StoreApi#deleteOrder
      */
-    public ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    public ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -56,7 +56,9 @@ public class StoreApiController implements StoreApi {
      * @return successful operation (status code 200)
      * @see StoreApi#getInventory
      */
-    public ResponseEntity<Map<String, Integer>> getInventory() {
+    public ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -71,9 +73,9 @@ public class StoreApiController implements StoreApi {
      *         or Order not found (status code 404)
      * @see StoreApi#getOrderById
      */
-    public ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    public ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
@@ -99,8 +101,8 @@ public class StoreApiController implements StoreApi {
      * @see StoreApi#placeOrder
      */
     public ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java
index 4cbe795d92ad0765c78c6b1d117727af799d11dc..3f8d7b71b281f1f7e027fbf8f9aeb844ad49323a 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -30,18 +30,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body);
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    );
 
 
     /**
@@ -50,18 +54,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body);
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    );
 
 
     /**
@@ -70,18 +78,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body);
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    );
 
 
     /**
@@ -92,20 +104,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-);
+    ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    );
 
 
     /**
@@ -116,23 +131,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-);
+    ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    );
 
 
     /**
@@ -143,23 +161,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-);
+    ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    );
 
 
     /**
@@ -167,16 +188,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    ResponseEntity<Void> logoutUser();
+    ResponseEntity<Void> logoutUser(
+        
+    );
 
 
     /**
@@ -188,21 +215,23 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body);
+    ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    );
 
 }
diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApiController.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApiController.java
index a5441a06b6579a994d1416fb5db7e21e68a5b8aa..224d437db48a1bdbbdc49dd0e2377acd75b5ee75 100644
--- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApiController.java
+++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApiController.java
@@ -43,8 +43,8 @@ public class UserApiController implements UserApi {
      * @see UserApi#createUser
      */
     public ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -57,8 +57,8 @@ public class UserApiController implements UserApi {
      * @see UserApi#createUsersWithArrayInput
      */
     public ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -71,8 +71,8 @@ public class UserApiController implements UserApi {
      * @see UserApi#createUsersWithListInput
      */
     public ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -86,9 +86,9 @@ public class UserApiController implements UserApi {
      *         or User not found (status code 404)
      * @see UserApi#deleteUser
      */
-    public ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    public ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -102,9 +102,9 @@ public class UserApiController implements UserApi {
      *         or User not found (status code 404)
      * @see UserApi#getUserByName
      */
-    public ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    public ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"firstName\" : \"firstName\", \"lastName\" : \"lastName\", \"password\" : \"password\", \"userStatus\" : 6, \"phone\" : \"phone\", \"id\" : 0, \"email\" : \"email\", \"username\" : \"username\" }";
@@ -130,11 +130,10 @@ public class UserApiController implements UserApi {
      *         or Invalid username/password supplied (status code 400)
      * @see UserApi#loginUser
      */
-    public ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    public ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -145,7 +144,9 @@ public class UserApiController implements UserApi {
      * @return successful operation (status code 200)
      * @see UserApi#logoutUser
      */
-    public ResponseEntity<Void> logoutUser() {
+    public ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -160,11 +161,10 @@ public class UserApiController implements UserApi {
      *         or User not found (status code 404)
      * @see UserApi#updateUser
      */
-    public ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    public ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
diff --git a/samples/server/petstore/springboot-beanvalidation/.openapi-generator/VERSION b/samples/server/petstore/springboot-beanvalidation/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot-beanvalidation/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot-beanvalidation/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot-beanvalidation/pom.xml b/samples/server/petstore/springboot-beanvalidation/pom.xml
index ae8ec70bc1c779e2264ab5d8c8dc6cc3ecd13265..a9da2ec020fd8218a420d8cde4525d07de88cd04 100644
--- a/samples/server/petstore/springboot-beanvalidation/pom.xml
+++ b/samples/server/petstore/springboot-beanvalidation/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,16 +38,17 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
@@ -63,12 +57,12 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 57e6c1d106723c45b01180e045a869a033abdf86..1667ef188aebc17f0a38b00f1a1db6c3a7172b83 100644
--- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,11 +36,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -48,8 +53,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java
index dfa1803e162df32ef6defef5e87cf40582a28fa5..71ffda67b0c260df3701011681b7279bbc11f5da 100644
--- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -45,19 +45,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,19 +74,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -95,19 +104,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
@@ -129,19 +143,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -154,19 +173,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -179,19 +203,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -204,21 +232,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,11 +262,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -243,8 +279,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -280,50 +316,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -344,35 +370,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -390,28 +412,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -423,19 +444,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -448,21 +473,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -479,26 +507,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -512,28 +540,33 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 8b45339424f3c1d09282ff831e330a64d523b014..e2459cc308c617de7280b228738e8639282ebf6d 100644
--- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,14 +36,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -51,8 +56,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/PetApi.java
index 693ce02c51e9754b69e6fca2013f025a95524687..e969bf667650a1e19e0b45b3a4be642a70ddff72 100644
--- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,25 +38,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,26 +75,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -103,25 +112,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-) {
+    default ResponseEntity<List<Pet>> 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) List<String> status
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -150,25 +166,32 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Set<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-) {
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -197,26 +220,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -245,29 +271,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -281,27 +310,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -315,28 +348,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/StoreApi.java
index d3a44c4e9c6763f98967d7bde447d0bf44e80a0f..19ab0bb614b675db53fe2de3cd170cd371169660 100644
--- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,20 +38,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -63,20 +66,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -91,23 +102,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -134,21 +148,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/UserApi.java
index 743aa88a6d29c2d5635ab5291559c6fa906d98f7..97583359e3b1ff06d9111685d8338f6ba4c5bb21 100644
--- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,18 +38,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -61,18 +65,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -84,18 +92,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -109,20 +121,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -136,23 +151,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -180,23 +198,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -207,16 +228,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,22 +258,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
diff --git a/samples/server/petstore/springboot-delegate-j8/.openapi-generator/VERSION b/samples/server/petstore/springboot-delegate-j8/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot-delegate-j8/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot-delegate-j8/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot-delegate-j8/pom.xml b/samples/server/petstore/springboot-delegate-j8/pom.xml
index 14ed219b34cc2ce9334b618d0c453fd6be9f6e85..4dc9b6f1c579b86b95572be2dd9e84da4f52c373 100644
--- a/samples/server/petstore/springboot-delegate-j8/pom.xml
+++ b/samples/server/petstore/springboot-delegate-j8/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,16 +38,17 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
@@ -63,12 +57,12 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 978eee460b5878c5eb780e6aa41db31f797d857e..ff5677cd8c33a0359b982d54eba0fe7a90e1a3ef 100644
--- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -32,11 +32,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -44,8 +49,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return getDelegate().call123testSpecialTags(body);
     }
 
diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
index 7e6ac74b30f46fee4c8782cf557456694deb03e7..a86542ddf2232d5f2c61e67f4ce9647cffd3eb1a 100644
--- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
+++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
@@ -1,7 +1,6 @@
 package org.openapitools.api;
 
 import org.openapitools.model.Client;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApi.java
index 34e7ffdf2fe370ead86f81f860a5c81cfba126de..52267c03910453a849b943969b762d7a8f688d90 100644
--- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -41,19 +41,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return getDelegate().createXmlItem(xmlItem);
     }
 
@@ -65,19 +69,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return getDelegate().fakeOuterBooleanSerialize(body);
     }
 
@@ -89,19 +98,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         return getDelegate().fakeOuterCompositeSerialize(body);
     }
 
@@ -113,19 +127,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return getDelegate().fakeOuterNumberSerialize(body);
     }
 
@@ -137,19 +156,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return getDelegate().fakeOuterStringSerialize(body);
     }
 
@@ -161,19 +185,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return getDelegate().testBodyWithFileSchema(body);
     }
 
@@ -185,21 +213,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return getDelegate().testBodyWithQueryParams(query, body);
     }
 
@@ -211,11 +242,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -223,8 +259,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return getDelegate().testClientModel(body);
     }
 
@@ -250,50 +286,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return getDelegate().testEndpointParameters(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, string, binary, date, dateTime, password, paramCallback);
     }
 
@@ -313,35 +339,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return getDelegate().testEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString);
     }
 
@@ -358,28 +380,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return getDelegate().testGroupParameters(requiredStringGroup, requiredBooleanGroup, requiredInt64Group, stringGroup, booleanGroup, int64Group);
     }
 
@@ -390,19 +411,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return getDelegate().testInlineAdditionalProperties(param);
     }
 
@@ -414,21 +439,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return getDelegate().testJsonFormData(param, param2);
     }
 
@@ -444,26 +472,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return getDelegate().testQueryParameterCollectionFormat(pipe, ioutil, http, url, context);
     }
 
@@ -476,28 +504,33 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         return getDelegate().uploadFileWithRequiredFile(petId, requiredFile, additionalMetadata);
     }
 
diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApiDelegate.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApiDelegate.java
index 32a862f8273fc698299c425fb7cf888283e75f7f..d3a949e65d8138b344d886d54f979da9b6ee4652 100644
--- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApiDelegate.java
+++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApiDelegate.java
@@ -10,7 +10,6 @@ import java.time.OffsetDateTime;
 import org.openapitools.model.OuterComposite;
 import org.openapitools.model.User;
 import org.openapitools.model.XmlItem;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index ba5b622efda7ac20a4fe3f8753c64898aa638e3a..f76698310b491b6398cc2602316570eefb1de74f 100644
--- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -32,14 +32,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -47,8 +52,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return getDelegate().testClassname(body);
     }
 
diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
index c71fe13d195a12997bf38735ab2f1acb3c245142..ed5a6bfc09a0971e3c638c45fba70d3cffb48ace 100644
--- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
+++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
@@ -1,7 +1,6 @@
 package org.openapitools.api;
 
 import org.openapitools.model.Client;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApi.java
index 4948412cbf911ba16099f66e0708656d8ad09a61..c62662ff8c93150242dd908d7ada86841f22078e 100644
--- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -34,25 +34,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return getDelegate().addPet(body);
     }
 
@@ -65,26 +70,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return getDelegate().deletePet(petId, apiKey);
     }
 
@@ -97,25 +106,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-) {
+    default ResponseEntity<List<Pet>> 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) List<String> status
+    ) {
         return getDelegate().findPetsByStatus(status);
     }
 
@@ -129,25 +145,32 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Set<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-) {
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
         return getDelegate().findPetsByTags(tags);
     }
 
@@ -161,26 +184,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         return getDelegate().getPetById(petId);
     }
 
@@ -194,29 +220,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return getDelegate().updatePet(body);
     }
 
@@ -229,27 +258,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return getDelegate().updatePetWithForm(petId, name, status);
     }
 
@@ -262,28 +295,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         return getDelegate().uploadFile(petId, additionalMetadata, file);
     }
 
diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApiDelegate.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApiDelegate.java
index b34d322223b69472fd7a37208e24cecc58a93fa4..e3adc7d4bca7189cdf820a64533a35952a36ae27 100644
--- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApiDelegate.java
+++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApiDelegate.java
@@ -3,7 +3,6 @@ package org.openapitools.api;
 import org.openapitools.model.ModelApiResponse;
 import org.openapitools.model.Pet;
 import java.util.Set;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApi.java
index 58cf7cd17c745e8b9da6817bd27927e139d0d583..39f4c0b7c7e9607dd5d904a01a33316ebc68fd0e 100644
--- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -34,20 +34,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return getDelegate().deleteOrder(orderId);
     }
 
@@ -58,20 +61,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return getDelegate().getInventory();
     }
 
@@ -85,23 +96,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         return getDelegate().getOrderById(orderId);
     }
 
@@ -113,21 +127,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         return getDelegate().placeOrder(body);
     }
 
diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApiDelegate.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApiDelegate.java
index 5091e7e1f2cc3816215068776cc0481ffa817f5a..dfe4bb314961354e39926b2eea4b6f161abbd3a4 100644
--- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApiDelegate.java
+++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApiDelegate.java
@@ -2,7 +2,6 @@ package org.openapitools.api;
 
 import java.util.Map;
 import org.openapitools.model.Order;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApi.java
index b77c5fb5ce71fe6e82f6c50618ec258b4246718e..b45b075f9240bda9770ec310e35c2df27af9b9bb 100644
--- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -34,18 +34,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return getDelegate().createUser(body);
     }
 
@@ -56,18 +60,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return getDelegate().createUsersWithArrayInput(body);
     }
 
@@ -78,18 +86,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return getDelegate().createUsersWithListInput(body);
     }
 
@@ -102,20 +114,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return getDelegate().deleteUser(username);
     }
 
@@ -128,23 +143,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         return getDelegate().getUserByName(username);
     }
 
@@ -157,23 +175,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return getDelegate().loginUser(username, password);
     }
 
@@ -183,16 +204,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return getDelegate().logoutUser();
     }
 
@@ -206,22 +233,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return getDelegate().updateUser(username, body);
     }
 
diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApiDelegate.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApiDelegate.java
index b63fa7a1c28a8e727f47e93cb2e47c41a9b1c489..2efbd71c9dc9b723f60cc035861e1b7f35093e7b 100644
--- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApiDelegate.java
+++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApiDelegate.java
@@ -3,7 +3,6 @@ package org.openapitools.api;
 import java.util.List;
 import java.time.OffsetDateTime;
 import org.openapitools.model.User;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-delegate/.openapi-generator/VERSION b/samples/server/petstore/springboot-delegate/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot-delegate/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot-delegate/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot-delegate/pom.xml b/samples/server/petstore/springboot-delegate/pom.xml
index f5fe58e2f14b727509cf01210ffc715a66dc276f..4e8cd4a140ea2bf3ab40df79684469ab70f55e27 100644
--- a/samples/server/petstore/springboot-delegate/pom.xml
+++ b/samples/server/petstore/springboot-delegate/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,16 +38,17 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
@@ -63,12 +57,12 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 978eee460b5878c5eb780e6aa41db31f797d857e..ff5677cd8c33a0359b982d54eba0fe7a90e1a3ef 100644
--- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -32,11 +32,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -44,8 +49,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return getDelegate().call123testSpecialTags(body);
     }
 
diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
index 7e6ac74b30f46fee4c8782cf557456694deb03e7..a86542ddf2232d5f2c61e67f4ce9647cffd3eb1a 100644
--- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
+++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
@@ -1,7 +1,6 @@
 package org.openapitools.api;
 
 import org.openapitools.model.Client;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java
index 34e7ffdf2fe370ead86f81f860a5c81cfba126de..52267c03910453a849b943969b762d7a8f688d90 100644
--- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -41,19 +41,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return getDelegate().createXmlItem(xmlItem);
     }
 
@@ -65,19 +69,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return getDelegate().fakeOuterBooleanSerialize(body);
     }
 
@@ -89,19 +98,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         return getDelegate().fakeOuterCompositeSerialize(body);
     }
 
@@ -113,19 +127,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return getDelegate().fakeOuterNumberSerialize(body);
     }
 
@@ -137,19 +156,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return getDelegate().fakeOuterStringSerialize(body);
     }
 
@@ -161,19 +185,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return getDelegate().testBodyWithFileSchema(body);
     }
 
@@ -185,21 +213,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return getDelegate().testBodyWithQueryParams(query, body);
     }
 
@@ -211,11 +242,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -223,8 +259,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return getDelegate().testClientModel(body);
     }
 
@@ -250,50 +286,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return getDelegate().testEndpointParameters(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, string, binary, date, dateTime, password, paramCallback);
     }
 
@@ -313,35 +339,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return getDelegate().testEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString);
     }
 
@@ -358,28 +380,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return getDelegate().testGroupParameters(requiredStringGroup, requiredBooleanGroup, requiredInt64Group, stringGroup, booleanGroup, int64Group);
     }
 
@@ -390,19 +411,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return getDelegate().testInlineAdditionalProperties(param);
     }
 
@@ -414,21 +439,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return getDelegate().testJsonFormData(param, param2);
     }
 
@@ -444,26 +472,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return getDelegate().testQueryParameterCollectionFormat(pipe, ioutil, http, url, context);
     }
 
@@ -476,28 +504,33 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         return getDelegate().uploadFileWithRequiredFile(petId, requiredFile, additionalMetadata);
     }
 
diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApiDelegate.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApiDelegate.java
index 32a862f8273fc698299c425fb7cf888283e75f7f..d3a949e65d8138b344d886d54f979da9b6ee4652 100644
--- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApiDelegate.java
+++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApiDelegate.java
@@ -10,7 +10,6 @@ import java.time.OffsetDateTime;
 import org.openapitools.model.OuterComposite;
 import org.openapitools.model.User;
 import org.openapitools.model.XmlItem;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index ba5b622efda7ac20a4fe3f8753c64898aa638e3a..f76698310b491b6398cc2602316570eefb1de74f 100644
--- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -32,14 +32,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -47,8 +52,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return getDelegate().testClassname(body);
     }
 
diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
index c71fe13d195a12997bf38735ab2f1acb3c245142..ed5a6bfc09a0971e3c638c45fba70d3cffb48ace 100644
--- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
+++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
@@ -1,7 +1,6 @@
 package org.openapitools.api;
 
 import org.openapitools.model.Client;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java
index 4948412cbf911ba16099f66e0708656d8ad09a61..c62662ff8c93150242dd908d7ada86841f22078e 100644
--- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -34,25 +34,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return getDelegate().addPet(body);
     }
 
@@ -65,26 +70,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return getDelegate().deletePet(petId, apiKey);
     }
 
@@ -97,25 +106,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-) {
+    default ResponseEntity<List<Pet>> 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) List<String> status
+    ) {
         return getDelegate().findPetsByStatus(status);
     }
 
@@ -129,25 +145,32 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Set<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-) {
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
         return getDelegate().findPetsByTags(tags);
     }
 
@@ -161,26 +184,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         return getDelegate().getPetById(petId);
     }
 
@@ -194,29 +220,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return getDelegate().updatePet(body);
     }
 
@@ -229,27 +258,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return getDelegate().updatePetWithForm(petId, name, status);
     }
 
@@ -262,28 +295,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         return getDelegate().uploadFile(petId, additionalMetadata, file);
     }
 
diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApiDelegate.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApiDelegate.java
index b34d322223b69472fd7a37208e24cecc58a93fa4..e3adc7d4bca7189cdf820a64533a35952a36ae27 100644
--- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApiDelegate.java
+++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApiDelegate.java
@@ -3,7 +3,6 @@ package org.openapitools.api;
 import org.openapitools.model.ModelApiResponse;
 import org.openapitools.model.Pet;
 import java.util.Set;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java
index 58cf7cd17c745e8b9da6817bd27927e139d0d583..39f4c0b7c7e9607dd5d904a01a33316ebc68fd0e 100644
--- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -34,20 +34,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return getDelegate().deleteOrder(orderId);
     }
 
@@ -58,20 +61,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return getDelegate().getInventory();
     }
 
@@ -85,23 +96,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         return getDelegate().getOrderById(orderId);
     }
 
@@ -113,21 +127,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         return getDelegate().placeOrder(body);
     }
 
diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApiDelegate.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApiDelegate.java
index 5091e7e1f2cc3816215068776cc0481ffa817f5a..dfe4bb314961354e39926b2eea4b6f161abbd3a4 100644
--- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApiDelegate.java
+++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApiDelegate.java
@@ -2,7 +2,6 @@ package org.openapitools.api;
 
 import java.util.Map;
 import org.openapitools.model.Order;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java
index b77c5fb5ce71fe6e82f6c50618ec258b4246718e..b45b075f9240bda9770ec310e35c2df27af9b9bb 100644
--- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -34,18 +34,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return getDelegate().createUser(body);
     }
 
@@ -56,18 +60,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return getDelegate().createUsersWithArrayInput(body);
     }
 
@@ -78,18 +86,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return getDelegate().createUsersWithListInput(body);
     }
 
@@ -102,20 +114,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return getDelegate().deleteUser(username);
     }
 
@@ -128,23 +143,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         return getDelegate().getUserByName(username);
     }
 
@@ -157,23 +175,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return getDelegate().loginUser(username, password);
     }
 
@@ -183,16 +204,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return getDelegate().logoutUser();
     }
 
@@ -206,22 +233,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return getDelegate().updateUser(username, body);
     }
 
diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApiDelegate.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApiDelegate.java
index b63fa7a1c28a8e727f47e93cb2e47c41a9b1c489..2efbd71c9dc9b723f60cc035861e1b7f35093e7b 100644
--- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApiDelegate.java
+++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApiDelegate.java
@@ -3,7 +3,6 @@ package org.openapitools.api;
 import java.util.List;
 import java.time.OffsetDateTime;
 import org.openapitools.model.User;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION b/samples/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot-implicitHeaders/pom.xml b/samples/server/petstore/springboot-implicitHeaders/pom.xml
index 149407e2aad3f284db4c353b756f730a6ebddead..28802bac54468cdcdb35d343b15be34f784dd285 100644
--- a/samples/server/petstore/springboot-implicitHeaders/pom.xml
+++ b/samples/server/petstore/springboot-implicitHeaders/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,16 +38,17 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
@@ -63,12 +57,12 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 3aa0b58d6c21303ebc13455d2dc82d8ba9044b92..08fad3c33bf25242f87a8c854f791f70597b2357 100644
--- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,11 +36,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -50,8 +55,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java
index d8109c85a034fa80acc325c8e9bf65db34c87560..940a7484519479102381f3623375bd9407f21f6b 100644
--- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -45,11 +45,15 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -58,8 +62,8 @@ public interface FakeApi {
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -72,11 +76,16 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -85,8 +94,8 @@ public interface FakeApi {
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -99,11 +108,16 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -112,8 +126,8 @@ public interface FakeApi {
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
@@ -135,11 +149,16 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -148,8 +167,8 @@ public interface FakeApi {
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -162,11 +181,16 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -175,8 +199,8 @@ public interface FakeApi {
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -189,11 +213,15 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -202,8 +230,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -216,11 +244,15 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -228,11 +260,10 @@ public interface FakeApi {
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -245,11 +276,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -259,8 +295,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -296,16 +332,19 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -314,34 +353,21 @@ public interface FakeApi {
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -360,35 +386,33 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @ApiImplicitParams({
-    @ApiImplicitParam(name = "enumHeaderStringArray", value = "Header parameter enum test (string array)",  dataType = "List<String>", paramType = "header"),
-    @ApiImplicitParam(name = "enumHeaderString", value = "Header parameter enum test (string)",  dataType = "String", paramType = "header")
+        @ApiImplicitParam(name = "enumHeaderStringArray", value = "Header parameter enum test (string array)",  dataType = "List<String>", paramType = "header"),
+        @ApiImplicitParam(name = "enumHeaderString", value = "Header parameter enum test (string)",  dataType = "String", paramType = "header")
     })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> testEnumParameters(@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+    default ResponseEntity<Void> testEnumParameters(
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -404,28 +428,29 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @ApiImplicitParams({
-    @ApiImplicitParam(name = "requiredBooleanGroup", value = "Required Boolean in group parameters", required = true, dataType = "Boolean", paramType = "header"),
-    @ApiImplicitParam(name = "booleanGroup", value = "Boolean in group parameters",  dataType = "Boolean", paramType = "header")
+        @ApiImplicitParam(name = "requiredBooleanGroup", value = "Required Boolean in group parameters", required = true, dataType = "Boolean", paramType = "header"),
+        @ApiImplicitParam(name = "booleanGroup", value = "Boolean in group parameters",  dataType = "Boolean", paramType = "header")
     })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -437,11 +462,15 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -450,8 +479,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -464,11 +493,15 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -477,10 +510,9 @@ public interface FakeApi {
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -497,28 +529,28 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -532,15 +564,22 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -549,13 +588,11 @@ public interface FakeApi {
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index a6c0dfd6f088d4f7704219d76fb672f36b36fc4c..902ff4d66003936fdfafa5cf9d1dc5b0ec775778 100644
--- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,14 +36,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -53,8 +58,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java
index 040870852682c1af8dd3756d1c48c5fbcacd3082..9ea20fa797980617d004dab4f1f3edf5bd719f94 100644
--- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,17 +38,22 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -57,8 +62,8 @@ public interface PetApi {
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -71,27 +76,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @ApiImplicitParams({
-    @ApiImplicitParam(name = "apiKey", value = "",  dataType = "String", paramType = "header")
+        @ApiImplicitParam(name = "apiKey", value = "",  dataType = "String", paramType = "header")
     })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -105,17 +115,24 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -123,9 +140,9 @@ public interface PetApi {
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-) {
+    default ResponseEntity<List<Pet>> 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) List<String> status
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -154,17 +171,24 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -172,9 +196,9 @@ public interface PetApi {
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Set<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-) {
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -203,18 +227,21 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -222,9 +249,9 @@ public interface PetApi {
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -253,21 +280,24 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -276,8 +306,8 @@ public interface PetApi {
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -291,15 +321,21 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -307,13 +343,11 @@ public interface PetApi {
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -327,15 +361,22 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -344,13 +385,11 @@ public interface PetApi {
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java
index 4534ce024da3198820f6a1f40171a829b5cebfa2..60aaea2af9a51b6c0f7d0d8b09ccfbbc98bf6541 100644
--- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,22 +38,25 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -65,14 +68,20 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -80,7 +89,9 @@ public interface StoreApi {
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -95,15 +106,18 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -111,9 +125,9 @@ public interface StoreApi {
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -140,13 +154,17 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -155,8 +173,8 @@ public interface StoreApi {
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java
index 80c294ca88d1dd45afc66a623a0dd373490a6ce2..47da1e2faf2bdee8f7c1a59989fd013007ebc7b5 100644
--- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,11 +38,15 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -50,8 +54,8 @@ public interface UserApi {
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -63,11 +67,15 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -75,8 +83,8 @@ public interface UserApi {
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -88,11 +96,15 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -100,8 +112,8 @@ public interface UserApi {
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -115,22 +127,25 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -144,15 +159,18 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -160,9 +178,9 @@ public interface UserApi {
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -190,13 +208,17 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
@@ -204,11 +226,10 @@ public interface UserApi {
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -219,18 +240,24 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -245,24 +272,26 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @ApiImplicitParams({
     })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
diff --git a/samples/server/petstore/springboot-reactive/.openapi-generator/VERSION b/samples/server/petstore/springboot-reactive/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot-reactive/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot-reactive/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot-reactive/pom.xml b/samples/server/petstore/springboot-reactive/pom.xml
index bc82bfdfef5dd5ac39f6d0bb9b001fcd457d3e43..6f5e06c6e297d38c99e2e54411908741944f7f80 100644
--- a/samples/server/petstore/springboot-reactive/pom.xml
+++ b/samples/server/petstore/springboot-reactive/pom.xml
@@ -9,11 +9,12 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-core-version>1.6.3</swagger-core-version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -21,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -40,20 +34,10 @@
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-commons</artifactId>
         </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>2.8.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.webjars</groupId>
-            <artifactId>swagger-ui</artifactId>
-            <version>3.14.2</version>
-        </dependency>
         <dependency>
             <groupId>io.swagger</groupId>
             <artifactId>swagger-annotations</artifactId>
-            <version>1.5.14</version>
+            <version>${swagger-core-version}</version>
         </dependency>
         <!-- @Nullable annotation -->
         <dependency>
@@ -72,12 +56,12 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 81cbd1690c9b046ba2798cfb7aa02f7cb7ec8c77..3fb97da7defe2051e8f9a68ed90955d23e9c80fd 100644
--- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,11 +36,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -48,8 +53,9 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default Mono<ResponseEntity<Client>> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Mono<Client> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Mono<Client> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().call123testSpecialTags(body, exchange);
     }
 
diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
index f925f8ac4789c12d82fa31107b4faf5ea58cdbf6..2ef11c811c11576687b9941a9d16331134807ec0 100644
--- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
+++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
@@ -1,7 +1,6 @@
 package org.openapitools.api;
 
 import org.openapitools.model.Client;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java
index 72297079212575da54af74d31fefd5e2d4017cc4..c01306b7fd40321bd66a400956c3608d804e1e58 100644
--- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -45,19 +45,24 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default Mono<ResponseEntity<Void>> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody Mono<XmlItem> xmlItem, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody Mono<XmlItem> xmlItem,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().createXmlItem(xmlItem, exchange);
     }
 
@@ -69,19 +74,25 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default Mono<ResponseEntity<Boolean>> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Mono<Boolean> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Mono<Boolean> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().fakeOuterBooleanSerialize(body, exchange);
     }
 
@@ -93,19 +104,25 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default Mono<ResponseEntity<OuterComposite>> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) Mono<OuterComposite> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) Mono<OuterComposite> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().fakeOuterCompositeSerialize(body, exchange);
     }
 
@@ -117,19 +134,25 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default Mono<ResponseEntity<BigDecimal>> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) Mono<BigDecimal> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) Mono<BigDecimal> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().fakeOuterNumberSerialize(body, exchange);
     }
 
@@ -141,19 +164,25 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default Mono<ResponseEntity<String>> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) Mono<String> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) Mono<String> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().fakeOuterStringSerialize(body, exchange);
     }
 
@@ -165,19 +194,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default Mono<ResponseEntity<Void>> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody Mono<FileSchemaTestClass> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody Mono<FileSchemaTestClass> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().testBodyWithFileSchema(body, exchange);
     }
 
@@ -189,21 +223,25 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default Mono<ResponseEntity<Void>> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody Mono<User> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Void>> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody Mono<User> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().testBodyWithQueryParams(query, body, exchange);
     }
 
@@ -215,11 +253,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -227,8 +270,9 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default Mono<ResponseEntity<Client>> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Mono<Client> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Mono<Client> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().testClientModel(body, exchange);
     }
 
@@ -254,50 +298,41 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default Mono<ResponseEntity<Void>> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) Flux<Part> binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) Flux<Part> binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().testEndpointParameters(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, string, binary, date, dateTime, password, paramCallback, exchange);
     }
 
@@ -317,35 +352,32 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default Mono<ResponseEntity<Void>> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().testEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString, exchange);
     }
 
@@ -362,28 +394,28 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default Mono<ResponseEntity<Void>> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Void>> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().testGroupParameters(requiredStringGroup, requiredBooleanGroup, requiredInt64Group, stringGroup, booleanGroup, int64Group, exchange);
     }
 
@@ -394,19 +426,24 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default Mono<ResponseEntity<Void>> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Mono<Map<String, String>> param, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Mono<Map<String, String>> param,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().testInlineAdditionalProperties(param, exchange);
     }
 
@@ -418,21 +455,25 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default Mono<ResponseEntity<Void>> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().testJsonFormData(param, param2, exchange);
     }
 
@@ -448,26 +489,27 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default Mono<ResponseEntity<Void>> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Void>> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().testQueryParameterCollectionFormat(pipe, ioutil, http, url, context, exchange);
     }
 
@@ -480,28 +522,34 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default Mono<ResponseEntity<ModelApiResponse>> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) Flux<Part> requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<ModelApiResponse>> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) Flux<Part> requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().uploadFileWithRequiredFile(petId, requiredFile, additionalMetadata, exchange);
     }
 
diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApiDelegate.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApiDelegate.java
index 348bc54bb047aac719f521d852cbcaf10720efbc..dbe78fa1c7f9d9298887036f1f3dc92e4cad4f6b 100644
--- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApiDelegate.java
+++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApiDelegate.java
@@ -10,7 +10,6 @@ import java.time.OffsetDateTime;
 import org.openapitools.model.OuterComposite;
 import org.openapitools.model.User;
 import org.openapitools.model.XmlItem;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 2a9ad13847b747c11892c1a30d91d1f11e3befd2..4d2d37f1a59a4a8e065bac308b334ea410ae5168 100644
--- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,14 +36,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -51,8 +56,9 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default Mono<ResponseEntity<Client>> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Mono<Client> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Mono<Client> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().testClassname(body, exchange);
     }
 
diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
index 621c233581855671e91a812308e9f857fad6e4f2..4127d96d9e3e4d008682c6b7c20b1aa6b2f1ae46 100644
--- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
+++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
@@ -1,7 +1,6 @@
 package org.openapitools.api;
 
 import org.openapitools.model.Client;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java
index 85222405a9b7c755e291c0940a5a2da648598a6d..877603ff0094a7b20af9108b1bda80a587fe47e3 100644
--- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,25 +38,31 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default Mono<ResponseEntity<Void>> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Mono<Pet> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Mono<Pet> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().addPet(body, exchange);
     }
 
@@ -69,26 +75,31 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default Mono<ResponseEntity<Void>> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Void>> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().deletePet(petId, apiKey, exchange);
     }
 
@@ -101,25 +112,33 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default Mono<ResponseEntity<Flux<Pet>>> 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) List<String> status
-
-, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Flux<Pet>>> 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) List<String> status,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().findPetsByStatus(status, exchange);
     }
 
@@ -133,25 +152,33 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default Mono<ResponseEntity<Flux<Pet>>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Flux<Pet>>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().findPetsByTags(tags, exchange);
     }
 
@@ -165,26 +192,30 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default Mono<ResponseEntity<Pet>> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Pet>> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().getPetById(petId, exchange);
     }
 
@@ -198,29 +229,33 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default Mono<ResponseEntity<Void>> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Mono<Pet> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Mono<Pet> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().updatePet(body, exchange);
     }
 
@@ -233,27 +268,32 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default Mono<ResponseEntity<Void>> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Void>> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().updatePetWithForm(petId, name, status, exchange);
     }
 
@@ -266,28 +306,34 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default Mono<ResponseEntity<ModelApiResponse>> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) Flux<Part> file, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<ModelApiResponse>> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) Flux<Part> file,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().uploadFile(petId, additionalMetadata, file, exchange);
     }
 
diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApiDelegate.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApiDelegate.java
index 12eca4209031c26c486e38c38577bfcea8dfa5ea..8dc1be776ea0034d2cfc8e416cb5c98c86d6be57 100644
--- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApiDelegate.java
+++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApiDelegate.java
@@ -3,7 +3,6 @@ package org.openapitools.api;
 import org.openapitools.model.ModelApiResponse;
 import org.openapitools.model.Pet;
 import java.util.Set;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java
index 3443339b8841d59e0844b66af976749c532dbd01..1b8cd86220372e58392371326619dc78fa6788af 100644
--- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,20 +38,24 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default Mono<ResponseEntity<Void>> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Void>> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().deleteOrder(orderId, exchange);
     }
 
@@ -62,20 +66,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default Mono<ResponseEntity<Map<String, Integer>>> getInventory(@springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Map<String, Integer>>> getInventory(
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().getInventory(exchange);
     }
 
@@ -89,23 +101,27 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default Mono<ResponseEntity<Order>> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Order>> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().getOrderById(orderId, exchange);
     }
 
@@ -117,21 +133,26 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default Mono<ResponseEntity<Order>> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Mono<Order> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Mono<Order> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().placeOrder(body, exchange);
     }
 
diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApiDelegate.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApiDelegate.java
index 680de023d029ea485855f384c93d55b8f88b5fb2..02daadf024a1ddabbd6ab8c3f4a3d2363f1b63b5 100644
--- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApiDelegate.java
+++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApiDelegate.java
@@ -2,7 +2,6 @@ package org.openapitools.api;
 
 import java.util.Map;
 import org.openapitools.model.Order;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java
index 7eb94eb0b37023226ba2bae31fe950e38293bd08..60a2f999e4bdd70d949054fc325e9ff3af2f821b 100644
--- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,18 +38,23 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default Mono<ResponseEntity<Void>> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody Mono<User> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody Mono<User> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().createUser(body, exchange);
     }
 
@@ -60,18 +65,23 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default Mono<ResponseEntity<Void>> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody Flux<User> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody Flux<User> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().createUsersWithArrayInput(body, exchange);
     }
 
@@ -82,18 +92,23 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default Mono<ResponseEntity<Void>> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody Flux<User> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody Flux<User> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().createUsersWithListInput(body, exchange);
     }
 
@@ -106,20 +121,24 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default Mono<ResponseEntity<Void>> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Void>> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().deleteUser(username, exchange);
     }
 
@@ -132,23 +151,27 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default Mono<ResponseEntity<User>> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<User>> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().getUserByName(username, exchange);
     }
 
@@ -161,23 +184,27 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default Mono<ResponseEntity<String>> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<String>> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().loginUser(username, password, exchange);
     }
 
@@ -187,16 +214,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default Mono<ResponseEntity<Void>> logoutUser(@springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Void>> logoutUser(
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().logoutUser(exchange);
     }
 
@@ -210,22 +243,25 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default Mono<ResponseEntity<Void>> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody Mono<User> body, @springfox.documentation.annotations.ApiIgnore final ServerWebExchange exchange) {
+    default Mono<ResponseEntity<Void>> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody Mono<User> body,
+         final ServerWebExchange exchange
+    ) {
         return getDelegate().updateUser(username, body, exchange);
     }
 
diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApiDelegate.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApiDelegate.java
index 563d11fa041ecec5081246e055287e954d35ad56..3985dd30ecdf269653c0451e6c873a00879b092b 100644
--- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApiDelegate.java
+++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApiDelegate.java
@@ -3,7 +3,6 @@ package org.openapitools.api;
 import java.util.List;
 import java.time.OffsetDateTime;
 import org.openapitools.model.User;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/.openapi-generator/VERSION b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/pom.xml b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/pom.xml
index d129b82917eb6500bdb87025cb8e8d2d5e766a22..93c4f5ec6dd5d2d299508067b3bec83fbf2c7d2c 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/pom.xml
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.7</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>1.5.12.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,31 +38,32 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.github.joschi.jackson</groupId>
             <artifactId>jackson-datatype-threetenbp</artifactId>
-            <version>2.8.4</version>
+            <version>2.9.10</version>
         </dependency>
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 151aa6dc81ddc4f6d32f99468cf97a9cc334d67c..eb4da37da2c4c980245f2b0c01045c65e18d9508 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -28,11 +28,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -40,7 +45,7 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body);
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    );
 
 }
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApiController.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApiController.java
index 30d4f1c90e32de1e096072a5d7e6c2b32379ec93..f1ca88a6a5edf52cb332997aebcae6431a86a680 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApiController.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApiController.java
@@ -39,8 +39,8 @@ public class AnotherFakeApiController implements AnotherFakeApi {
      * @see AnotherFakeApi#call123testSpecialTags
      */
     public ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return delegate.call123testSpecialTags(body);
     }
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
index d17e376d976f2c6e9251adf16cdf0ad70e808c2d..17244270c8599338010ac998fa17d59b21f7b1b5 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
@@ -1,7 +1,6 @@
 package org.openapitools.api;
 
 import org.openapitools.model.Client;
-import io.swagger.annotations.*;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.multipart.MultipartFile;
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApi.java
index 3cc9777cabcff510c9891f0d3d9b8186e02ecb29..1030dcc870c8f19f7c865f31e9b880334a75268a 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -37,19 +37,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem);
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    );
 
 
     /**
@@ -59,19 +63,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body);
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    );
 
 
     /**
@@ -81,19 +90,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body);
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    );
 
 
     /**
@@ -103,19 +117,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body);
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    );
 
 
     /**
@@ -125,19 +144,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body);
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    );
 
 
     /**
@@ -147,19 +171,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body);
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    );
 
 
     /**
@@ -169,21 +197,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body);
+    ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    );
 
 
     /**
@@ -193,11 +224,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -205,8 +241,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body);
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    );
 
 
     /**
@@ -230,50 +266,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback);
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    );
 
 
     /**
@@ -291,35 +317,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString);
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    );
 
 
     /**
@@ -334,28 +356,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-);
+    ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    );
 
 
     /**
@@ -364,19 +385,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param);
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    );
 
 
     /**
@@ -386,21 +411,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2);
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    );
 
 
     /**
@@ -414,26 +442,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-);
+    ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    );
 
 
     /**
@@ -444,27 +472,32 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata);
+    ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    );
 
 }
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApiController.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApiController.java
index e714970497e17ec270b8ebb5af872e29d6b30337..76cc2bb95757463b165fcfd58724c959223fa6bd 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApiController.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApiController.java
@@ -48,8 +48,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#createXmlItem
      */
     public ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return delegate.createXmlItem(xmlItem);
     }
 
@@ -62,8 +62,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#fakeOuterBooleanSerialize
      */
     public ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return delegate.fakeOuterBooleanSerialize(body);
     }
 
@@ -76,8 +76,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#fakeOuterCompositeSerialize
      */
     public ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         return delegate.fakeOuterCompositeSerialize(body);
     }
 
@@ -90,8 +90,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#fakeOuterNumberSerialize
      */
     public ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return delegate.fakeOuterNumberSerialize(body);
     }
 
@@ -104,8 +104,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#fakeOuterStringSerialize
      */
     public ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return delegate.fakeOuterStringSerialize(body);
     }
 
@@ -118,8 +118,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testBodyWithFileSchema
      */
     public ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return delegate.testBodyWithFileSchema(body);
     }
 
@@ -131,11 +131,10 @@ public class FakeApiController implements FakeApi {
      * @return Success (status code 200)
      * @see FakeApi#testBodyWithQueryParams
      */
-    public ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    public ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return delegate.testBodyWithQueryParams(query, body);
     }
 
@@ -148,8 +147,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testClientModel
      */
     public ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return delegate.testClientModel(body);
     }
 
@@ -176,34 +175,21 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testEndpointParameters
      */
     public ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return delegate.testEndpointParameters(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, string, binary, date, dateTime, password, paramCallback);
     }
 
@@ -224,22 +210,15 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testEnumParameters
      */
     public ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return delegate.testEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString);
     }
 
@@ -256,19 +235,14 @@ public class FakeApiController implements FakeApi {
      * @return Someting wrong (status code 400)
      * @see FakeApi#testGroupParameters
      */
-    public ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    public ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return delegate.testGroupParameters(requiredStringGroup, requiredBooleanGroup, requiredInt64Group, stringGroup, booleanGroup, int64Group);
     }
 
@@ -280,8 +254,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testInlineAdditionalProperties
      */
     public ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return delegate.testInlineAdditionalProperties(param);
     }
 
@@ -294,10 +268,9 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testJsonFormData
      */
     public ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return delegate.testJsonFormData(param, param2);
     }
 
@@ -313,17 +286,13 @@ public class FakeApiController implements FakeApi {
      * @return Success (status code 200)
      * @see FakeApi#testQueryParameterCollectionFormat
      */
-    public ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    public ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return delegate.testQueryParameterCollectionFormat(pipe, ioutil, http, url, context);
     }
 
@@ -336,13 +305,11 @@ public class FakeApiController implements FakeApi {
      * @return successful operation (status code 200)
      * @see FakeApi#uploadFileWithRequiredFile
      */
-    public ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    public ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         return delegate.uploadFileWithRequiredFile(petId, requiredFile, additionalMetadata);
     }
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApiDelegate.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApiDelegate.java
index 3a442bdc25cf932f3157610c2e64eac2c45272c4..e88b7aa6ca5042a756942cde94c0e464b9ab60f7 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApiDelegate.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApiDelegate.java
@@ -10,7 +10,6 @@ import org.threeten.bp.OffsetDateTime;
 import org.openapitools.model.OuterComposite;
 import org.openapitools.model.User;
 import org.openapitools.model.XmlItem;
-import io.swagger.annotations.*;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.multipart.MultipartFile;
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 7f524d7af4ad195513cccbc19ad1237104378832..f482b6bf5ac97754e1cceaba11743d27cded2e27 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -28,14 +28,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -43,7 +48,7 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body);
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    );
 
 }
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
index 027fe24ac123e10fdaeaf02d60546869c64556ba..65de19a78d30d05f05bd97564423c5316ec23a45 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
@@ -39,8 +39,8 @@ public class FakeClassnameTestApiController implements FakeClassnameTestApi {
      * @see FakeClassnameTestApi#testClassname
      */
     public ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return delegate.testClassname(body);
     }
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
index 20d9b798c6273f5b14fb867b58e24d01414ac298..31b94ac1095886a36c015534196b80ab7606d65a 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
@@ -1,7 +1,6 @@
 package org.openapitools.api;
 
 import org.openapitools.model.Client;
-import io.swagger.annotations.*;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.multipart.MultipartFile;
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApi.java
index 41b8fce914ab389dfd7acaf1b1cc73e1b39bfd58..c8b2da14ebfc084ac0cff821e8c85267f6dc7f89 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -29,25 +29,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body);
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    );
 
 
     /**
@@ -58,26 +63,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-);
+    ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    );
 
 
     /**
@@ -88,25 +97,33 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<List<Pet>> 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) List<String> status
-
-, @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable);
+    ResponseEntity<List<Pet>> 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) List<String> status,
+        @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable
+    );
 
 
     /**
@@ -118,25 +135,33 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<List<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
-
-, @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable);
+    ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags,
+        @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable
+    );
 
 
     /**
@@ -148,26 +173,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-);
+    ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    );
 
 
     /**
@@ -179,29 +207,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body);
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    );
 
 
     /**
@@ -212,27 +243,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status);
+    ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    );
 
 
     /**
@@ -243,27 +278,32 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file);
+    ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    );
 
 }
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApiController.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApiController.java
index 79e735b977f3529c3d6d4175f2502e040ae131b5..5583546f3e50197e90d6cfd4bcf6974cb893d6a0 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApiController.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApiController.java
@@ -40,8 +40,8 @@ public class PetApiController implements PetApi {
      * @see PetApi#addPet
      */
     public ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return delegate.addPet(body);
     }
 
@@ -54,11 +54,10 @@ public class PetApiController implements PetApi {
      *         or Invalid pet value (status code 400)
      * @see PetApi#deletePet
      */
-    public ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    public ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return delegate.deletePet(petId, apiKey);
     }
 
@@ -71,9 +70,10 @@ public class PetApiController implements PetApi {
      *         or Invalid status value (status code 400)
      * @see PetApi#findPetsByStatus
      */
-    public ResponseEntity<List<Pet>> 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) List<String> status
-
-, @springfox.documentation.annotations.ApiIgnore final Pageable pageable) {
+    public ResponseEntity<List<Pet>> 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) List<String> status,
+        @springfox.documentation.annotations.ApiIgnore final Pageable pageable
+    ) {
         return delegate.findPetsByStatus(status, pageable);
     }
 
@@ -87,9 +87,10 @@ public class PetApiController implements PetApi {
      * @deprecated
      * @see PetApi#findPetsByTags
      */
-    public ResponseEntity<List<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
-
-, @springfox.documentation.annotations.ApiIgnore final Pageable pageable) {
+    public ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags,
+        @springfox.documentation.annotations.ApiIgnore final Pageable pageable
+    ) {
         return delegate.findPetsByTags(tags, pageable);
     }
 
@@ -103,9 +104,9 @@ public class PetApiController implements PetApi {
      *         or Pet not found (status code 404)
      * @see PetApi#getPetById
      */
-    public ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    public ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         return delegate.getPetById(petId);
     }
 
@@ -120,8 +121,8 @@ public class PetApiController implements PetApi {
      * @see PetApi#updatePet
      */
     public ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return delegate.updatePet(body);
     }
 
@@ -134,13 +135,11 @@ public class PetApiController implements PetApi {
      * @return Invalid input (status code 405)
      * @see PetApi#updatePetWithForm
      */
-    public ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    public ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return delegate.updatePetWithForm(petId, name, status);
     }
 
@@ -153,13 +152,11 @@ public class PetApiController implements PetApi {
      * @return successful operation (status code 200)
      * @see PetApi#uploadFile
      */
-    public ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    public ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         return delegate.uploadFile(petId, additionalMetadata, file);
     }
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApiDelegate.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApiDelegate.java
index 6ccfd0c28742ef8dace48c2ef1475220550351aa..94d3c58d33279056da18e7f510852c4148a9227b 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApiDelegate.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApiDelegate.java
@@ -2,7 +2,6 @@ package org.openapitools.api;
 
 import org.openapitools.model.ModelApiResponse;
 import org.openapitools.model.Pet;
-import io.swagger.annotations.*;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -47,7 +46,7 @@ public interface PetApiDelegate {
      *         or Invalid status value (status code 400)
      * @see PetApi#findPetsByStatus
      */
-    ResponseEntity<List<Pet>> findPetsByStatus(List<String> status, final Pageable pageable);
+    ResponseEntity<List<Pet>> findPetsByStatus(List<String> status, final org.springframework.data.domain.Pageable pageable);
 
     /**
      * GET /pet/findByTags : Finds Pets by tags
@@ -59,7 +58,7 @@ public interface PetApiDelegate {
      * @deprecated
      * @see PetApi#findPetsByTags
      */
-    ResponseEntity<List<Pet>> findPetsByTags(List<String> tags, final Pageable pageable);
+    ResponseEntity<List<Pet>> findPetsByTags(List<String> tags, final org.springframework.data.domain.Pageable pageable);
 
     /**
      * GET /pet/{petId} : Find pet by ID
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApi.java
index 25b01491b5077f8caf5f37e8336cb1453f96fc5d..cb72ccb357fd5bd8b4770f376faf8d7c23975b11 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -30,20 +30,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-);
+    ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    );
 
 
     /**
@@ -52,20 +55,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    ResponseEntity<Map<String, Integer>> getInventory();
+    ResponseEntity<Map<String, Integer>> getInventory(
+        
+    );
 
 
     /**
@@ -77,23 +88,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-);
+    ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    );
 
 
     /**
@@ -103,20 +117,24 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body);
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    );
 
 }
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApiController.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApiController.java
index 76d07f1fc783a8a3b375178597882b2e6ba72b5c..3becdad6f4a6d3e3486dd5350ba490227edd08b0 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApiController.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApiController.java
@@ -40,9 +40,9 @@ public class StoreApiController implements StoreApi {
      *         or Order not found (status code 404)
      * @see StoreApi#deleteOrder
      */
-    public ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    public ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return delegate.deleteOrder(orderId);
     }
 
@@ -53,7 +53,9 @@ public class StoreApiController implements StoreApi {
      * @return successful operation (status code 200)
      * @see StoreApi#getInventory
      */
-    public ResponseEntity<Map<String, Integer>> getInventory() {
+    public ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return delegate.getInventory();
     }
 
@@ -67,9 +69,9 @@ public class StoreApiController implements StoreApi {
      *         or Order not found (status code 404)
      * @see StoreApi#getOrderById
      */
-    public ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    public ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         return delegate.getOrderById(orderId);
     }
 
@@ -82,8 +84,8 @@ public class StoreApiController implements StoreApi {
      * @see StoreApi#placeOrder
      */
     public ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         return delegate.placeOrder(body);
     }
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApiDelegate.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApiDelegate.java
index a7bfc60e12892fa760b810c04c63fecb4a4d2a12..a6ad2c60995586d128f52bb00a60adabecfe1196 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApiDelegate.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApiDelegate.java
@@ -2,7 +2,6 @@ package org.openapitools.api;
 
 import java.util.Map;
 import org.openapitools.model.Order;
-import io.swagger.annotations.*;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.multipart.MultipartFile;
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApi.java
index 4cbe795d92ad0765c78c6b1d117727af799d11dc..3f8d7b71b281f1f7e027fbf8f9aeb844ad49323a 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -30,18 +30,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body);
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    );
 
 
     /**
@@ -50,18 +54,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body);
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    );
 
 
     /**
@@ -70,18 +78,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body);
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    );
 
 
     /**
@@ -92,20 +104,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-);
+    ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    );
 
 
     /**
@@ -116,23 +131,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-);
+    ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    );
 
 
     /**
@@ -143,23 +161,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-);
+    ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    );
 
 
     /**
@@ -167,16 +188,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    ResponseEntity<Void> logoutUser();
+    ResponseEntity<Void> logoutUser(
+        
+    );
 
 
     /**
@@ -188,21 +215,23 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body);
+    ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    );
 
 }
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApiController.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApiController.java
index 927da273215fbb1b01cb6c1e37b17b8dbe526cae..a9721c9a469e8d4d8f1d9ee6b9519a9414f6195b 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApiController.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApiController.java
@@ -41,8 +41,8 @@ public class UserApiController implements UserApi {
      * @see UserApi#createUser
      */
     public ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return delegate.createUser(body);
     }
 
@@ -54,8 +54,8 @@ public class UserApiController implements UserApi {
      * @see UserApi#createUsersWithArrayInput
      */
     public ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return delegate.createUsersWithArrayInput(body);
     }
 
@@ -67,8 +67,8 @@ public class UserApiController implements UserApi {
      * @see UserApi#createUsersWithListInput
      */
     public ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return delegate.createUsersWithListInput(body);
     }
 
@@ -81,9 +81,9 @@ public class UserApiController implements UserApi {
      *         or User not found (status code 404)
      * @see UserApi#deleteUser
      */
-    public ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    public ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return delegate.deleteUser(username);
     }
 
@@ -96,9 +96,9 @@ public class UserApiController implements UserApi {
      *         or User not found (status code 404)
      * @see UserApi#getUserByName
      */
-    public ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    public ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         return delegate.getUserByName(username);
     }
 
@@ -111,11 +111,10 @@ public class UserApiController implements UserApi {
      *         or Invalid username/password supplied (status code 400)
      * @see UserApi#loginUser
      */
-    public ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    public ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return delegate.loginUser(username, password);
     }
 
@@ -125,7 +124,9 @@ public class UserApiController implements UserApi {
      * @return successful operation (status code 200)
      * @see UserApi#logoutUser
      */
-    public ResponseEntity<Void> logoutUser() {
+    public ResponseEntity<Void> logoutUser(
+        
+    ) {
         return delegate.logoutUser();
     }
 
@@ -139,11 +140,10 @@ public class UserApiController implements UserApi {
      *         or User not found (status code 404)
      * @see UserApi#updateUser
      */
-    public ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    public ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return delegate.updateUser(username, body);
     }
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApiDelegate.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApiDelegate.java
index 00d156773a2e34b1db07ef20608cab8ff7e27ae1..f41ca92fd5950514e0c8ed32350dbaa4aa26decc 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApiDelegate.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApiDelegate.java
@@ -3,7 +3,6 @@ package org.openapitools.api;
 import java.util.List;
 import org.threeten.bp.OffsetDateTime;
 import org.openapitools.model.User;
-import io.swagger.annotations.*;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.multipart.MultipartFile;
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/.openapi-generator/VERSION b/samples/server/petstore/springboot-spring-pageable-delegatePattern/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/pom.xml b/samples/server/petstore/springboot-spring-pageable-delegatePattern/pom.xml
index 5a29021686c605cf5ef5d8fe8b0707e756601985..a5ac06132f2530a162cdada6e7e2d3e219002873 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/pom.xml
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,16 +38,17 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
@@ -63,12 +57,12 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 978eee460b5878c5eb780e6aa41db31f797d857e..ff5677cd8c33a0359b982d54eba0fe7a90e1a3ef 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -32,11 +32,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -44,8 +49,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return getDelegate().call123testSpecialTags(body);
     }
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
index 7e6ac74b30f46fee4c8782cf557456694deb03e7..a86542ddf2232d5f2c61e67f4ce9647cffd3eb1a 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApiDelegate.java
@@ -1,7 +1,6 @@
 package org.openapitools.api;
 
 import org.openapitools.model.Client;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApi.java
index 5e5c3fc8c98f9d6c46c1ca3693eeddfa4b4532a3..0abbadcd381d9731443c4464c908208ca4e1d36d 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -41,19 +41,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return getDelegate().createXmlItem(xmlItem);
     }
 
@@ -65,19 +69,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return getDelegate().fakeOuterBooleanSerialize(body);
     }
 
@@ -89,19 +98,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         return getDelegate().fakeOuterCompositeSerialize(body);
     }
 
@@ -113,19 +127,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return getDelegate().fakeOuterNumberSerialize(body);
     }
 
@@ -137,19 +156,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return getDelegate().fakeOuterStringSerialize(body);
     }
 
@@ -161,19 +185,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return getDelegate().testBodyWithFileSchema(body);
     }
 
@@ -185,21 +213,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return getDelegate().testBodyWithQueryParams(query, body);
     }
 
@@ -211,11 +242,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -223,8 +259,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return getDelegate().testClientModel(body);
     }
 
@@ -250,50 +286,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return getDelegate().testEndpointParameters(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, string, binary, date, dateTime, password, paramCallback);
     }
 
@@ -313,35 +339,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return getDelegate().testEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString);
     }
 
@@ -358,28 +380,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return getDelegate().testGroupParameters(requiredStringGroup, requiredBooleanGroup, requiredInt64Group, stringGroup, booleanGroup, int64Group);
     }
 
@@ -390,19 +411,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return getDelegate().testInlineAdditionalProperties(param);
     }
 
@@ -414,21 +439,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return getDelegate().testJsonFormData(param, param2);
     }
 
@@ -444,26 +472,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return getDelegate().testQueryParameterCollectionFormat(pipe, ioutil, http, url, context);
     }
 
@@ -476,28 +504,33 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         return getDelegate().uploadFileWithRequiredFile(petId, requiredFile, additionalMetadata);
     }
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApiDelegate.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApiDelegate.java
index 61a6142cc5e4127acfc2aab402bfb5c2c5eaf6c8..de03df40267404a16635f81384168c5598beaba3 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApiDelegate.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApiDelegate.java
@@ -10,7 +10,6 @@ import java.time.OffsetDateTime;
 import org.openapitools.model.OuterComposite;
 import org.openapitools.model.User;
 import org.openapitools.model.XmlItem;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index ba5b622efda7ac20a4fe3f8753c64898aa638e3a..f76698310b491b6398cc2602316570eefb1de74f 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -32,14 +32,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -47,8 +52,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         return getDelegate().testClassname(body);
     }
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
index c71fe13d195a12997bf38735ab2f1acb3c245142..ed5a6bfc09a0971e3c638c45fba70d3cffb48ace 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApiDelegate.java
@@ -1,7 +1,6 @@
 package org.openapitools.api;
 
 import org.openapitools.model.Client;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApi.java
index ce9171bef3d029c7af83625fa1bcb27e9dab3720..ad5e552b083cb82ca9fa965bce8730ef704c5a45 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -33,25 +33,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return getDelegate().addPet(body);
     }
 
@@ -64,26 +69,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return getDelegate().deletePet(petId, apiKey);
     }
 
@@ -96,25 +105,33 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-, @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable) {
+    default ResponseEntity<List<Pet>> 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) List<String> status,
+        @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable
+    ) {
         return getDelegate().findPetsByStatus(status, pageable);
     }
 
@@ -128,25 +145,33 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
-
-, @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable) {
+    default ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags,
+        @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable
+    ) {
         return getDelegate().findPetsByTags(tags, pageable);
     }
 
@@ -160,26 +185,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         return getDelegate().getPetById(petId);
     }
 
@@ -193,29 +221,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return getDelegate().updatePet(body);
     }
 
@@ -228,27 +259,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return getDelegate().updatePetWithForm(petId, name, status);
     }
 
@@ -261,28 +296,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         return getDelegate().uploadFile(petId, additionalMetadata, file);
     }
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApiDelegate.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApiDelegate.java
index 992e770d81d7842196402d37583b364dc20d63cd..02d3eee8e53f832ad8bf5ef28c7ef34913d5f5a4 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApiDelegate.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApiDelegate.java
@@ -2,7 +2,6 @@ package org.openapitools.api;
 
 import org.openapitools.model.ModelApiResponse;
 import org.openapitools.model.Pet;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
@@ -61,7 +60,7 @@ public interface PetApiDelegate {
      *         or Invalid status value (status code 400)
      * @see PetApi#findPetsByStatus
      */
-    default ResponseEntity<List<Pet>> findPetsByStatus(List<String> status, final Pageable pageable) {
+    default ResponseEntity<List<Pet>> findPetsByStatus(List<String> status, final org.springframework.data.domain.Pageable pageable) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -90,7 +89,7 @@ public interface PetApiDelegate {
      * @deprecated
      * @see PetApi#findPetsByTags
      */
-    default ResponseEntity<List<Pet>> findPetsByTags(List<String> tags, final Pageable pageable) {
+    default ResponseEntity<List<Pet>> findPetsByTags(List<String> tags, final org.springframework.data.domain.Pageable pageable) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApi.java
index 58cf7cd17c745e8b9da6817bd27927e139d0d583..39f4c0b7c7e9607dd5d904a01a33316ebc68fd0e 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -34,20 +34,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return getDelegate().deleteOrder(orderId);
     }
 
@@ -58,20 +61,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return getDelegate().getInventory();
     }
 
@@ -85,23 +96,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         return getDelegate().getOrderById(orderId);
     }
 
@@ -113,21 +127,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         return getDelegate().placeOrder(body);
     }
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApiDelegate.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApiDelegate.java
index 5091e7e1f2cc3816215068776cc0481ffa817f5a..dfe4bb314961354e39926b2eea4b6f161abbd3a4 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApiDelegate.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApiDelegate.java
@@ -2,7 +2,6 @@ package org.openapitools.api;
 
 import java.util.Map;
 import org.openapitools.model.Order;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApi.java
index b77c5fb5ce71fe6e82f6c50618ec258b4246718e..b45b075f9240bda9770ec310e35c2df27af9b9bb 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -34,18 +34,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return getDelegate().createUser(body);
     }
 
@@ -56,18 +60,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return getDelegate().createUsersWithArrayInput(body);
     }
 
@@ -78,18 +86,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return getDelegate().createUsersWithListInput(body);
     }
 
@@ -102,20 +114,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return getDelegate().deleteUser(username);
     }
 
@@ -128,23 +143,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         return getDelegate().getUserByName(username);
     }
 
@@ -157,23 +175,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return getDelegate().loginUser(username, password);
     }
 
@@ -183,16 +204,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return getDelegate().logoutUser();
     }
 
@@ -206,22 +233,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return getDelegate().updateUser(username, body);
     }
 
diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApiDelegate.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApiDelegate.java
index b63fa7a1c28a8e727f47e93cb2e47c41a9b1c489..2efbd71c9dc9b723f60cc035861e1b7f35093e7b 100644
--- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApiDelegate.java
+++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApiDelegate.java
@@ -3,7 +3,6 @@ package org.openapitools.api;
 import java.util.List;
 import java.time.OffsetDateTime;
 import org.openapitools.model.User;
-import io.swagger.annotations.*;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/.openapi-generator/VERSION b/samples/server/petstore/springboot-spring-pageable-without-j8/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/pom.xml b/samples/server/petstore/springboot-spring-pageable-without-j8/pom.xml
index 62d59d9d1d7d4d45dd3eeeb0502e6ae4124007d0..b8f2eb11628354b95ce1a00b347df20e06c47f44 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/pom.xml
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.7</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>1.5.12.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,31 +38,32 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.github.joschi.jackson</groupId>
             <artifactId>jackson-datatype-threetenbp</artifactId>
-            <version>2.8.4</version>
+            <version>2.9.10</version>
         </dependency>
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 151aa6dc81ddc4f6d32f99468cf97a9cc334d67c..eb4da37da2c4c980245f2b0c01045c65e18d9508 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -28,11 +28,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -40,7 +45,7 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body);
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    );
 
 }
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApiController.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApiController.java
index ec32cf448bff6bec57cfb291fa5f0e26d70512ab..e8f022846bfc259150b97d189601609a43c40ebe 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApiController.java
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApiController.java
@@ -41,8 +41,8 @@ public class AnotherFakeApiController implements AnotherFakeApi {
      * @see AnotherFakeApi#call123testSpecialTags
      */
     public ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"client\" : \"client\" }";
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApi.java
index 3cc9777cabcff510c9891f0d3d9b8186e02ecb29..1030dcc870c8f19f7c865f31e9b880334a75268a 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -37,19 +37,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem);
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    );
 
 
     /**
@@ -59,19 +63,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body);
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    );
 
 
     /**
@@ -81,19 +90,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body);
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    );
 
 
     /**
@@ -103,19 +117,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body);
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    );
 
 
     /**
@@ -125,19 +144,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body);
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    );
 
 
     /**
@@ -147,19 +171,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body);
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    );
 
 
     /**
@@ -169,21 +197,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body);
+    ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    );
 
 
     /**
@@ -193,11 +224,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -205,8 +241,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body);
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    );
 
 
     /**
@@ -230,50 +266,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback);
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    );
 
 
     /**
@@ -291,35 +317,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString);
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    );
 
 
     /**
@@ -334,28 +356,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-);
+    ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    );
 
 
     /**
@@ -364,19 +385,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param);
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    );
 
 
     /**
@@ -386,21 +411,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2);
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    );
 
 
     /**
@@ -414,26 +442,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-);
+    ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    );
 
 
     /**
@@ -444,27 +472,32 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata);
+    ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    );
 
 }
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApiController.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApiController.java
index 34b4872f1857d8877e02d8ae68a081738d4dcf0b..9a5306056e8598f68c35bcd0b38ea814b8fd7970 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApiController.java
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApiController.java
@@ -50,8 +50,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#createXmlItem
      */
     public ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -65,8 +65,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#fakeOuterBooleanSerialize
      */
     public ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -80,8 +80,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#fakeOuterCompositeSerialize
      */
     public ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
                 String exampleString = "{ \"my_string\" : \"my_string\", \"my_number\" : 0.8008281904610115, \"my_boolean\" : true }";
@@ -102,8 +102,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#fakeOuterNumberSerialize
      */
     public ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -117,8 +117,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#fakeOuterStringSerialize
      */
     public ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -132,8 +132,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testBodyWithFileSchema
      */
     public ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -146,11 +146,10 @@ public class FakeApiController implements FakeApi {
      * @return Success (status code 200)
      * @see FakeApi#testBodyWithQueryParams
      */
-    public ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    public ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -164,8 +163,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testClientModel
      */
     public ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"client\" : \"client\" }";
@@ -200,34 +199,21 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testEndpointParameters
      */
     public ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -249,22 +235,15 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testEnumParameters
      */
     public ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -282,19 +261,14 @@ public class FakeApiController implements FakeApi {
      * @return Someting wrong (status code 400)
      * @see FakeApi#testGroupParameters
      */
-    public ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    public ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -307,8 +281,8 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testInlineAdditionalProperties
      */
     public ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -322,10 +296,9 @@ public class FakeApiController implements FakeApi {
      * @see FakeApi#testJsonFormData
      */
     public ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -342,17 +315,13 @@ public class FakeApiController implements FakeApi {
      * @return Success (status code 200)
      * @see FakeApi#testQueryParameterCollectionFormat
      */
-    public ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    public ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -366,13 +335,11 @@ public class FakeApiController implements FakeApi {
      * @return successful operation (status code 200)
      * @see FakeApi#uploadFileWithRequiredFile
      */
-    public ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    public ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 7f524d7af4ad195513cccbc19ad1237104378832..f482b6bf5ac97754e1cceaba11743d27cded2e27 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -28,14 +28,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -43,7 +48,7 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body);
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    );
 
 }
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
index 80e92bdeaf15b6920d8cac949a5112d4a7dc6000..b705c60d83bba1bd0e6ca57c3bfdcaea83ff79bb 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApiController.java
@@ -41,8 +41,8 @@ public class FakeClassnameTestApiController implements FakeClassnameTestApi {
      * @see FakeClassnameTestApi#testClassname
      */
     public ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"client\" : \"client\" }";
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApi.java
index 41b8fce914ab389dfd7acaf1b1cc73e1b39bfd58..c8b2da14ebfc084ac0cff821e8c85267f6dc7f89 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -29,25 +29,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body);
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    );
 
 
     /**
@@ -58,26 +63,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-);
+    ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    );
 
 
     /**
@@ -88,25 +97,33 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<List<Pet>> 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) List<String> status
-
-, @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable);
+    ResponseEntity<List<Pet>> 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) List<String> status,
+        @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable
+    );
 
 
     /**
@@ -118,25 +135,33 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<List<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
-
-, @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable);
+    ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags,
+        @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable
+    );
 
 
     /**
@@ -148,26 +173,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-);
+    ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    );
 
 
     /**
@@ -179,29 +207,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body);
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    );
 
 
     /**
@@ -212,27 +243,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status);
+    ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    );
 
 
     /**
@@ -243,27 +278,32 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file);
+    ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    );
 
 }
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApiController.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApiController.java
index 27bc49a0f61e0c4df8aee40862f9905dbbdba80c..32b8031cf8351801184a08ee738018e99893d0bc 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApiController.java
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApiController.java
@@ -42,8 +42,8 @@ public class PetApiController implements PetApi {
      * @see PetApi#addPet
      */
     public ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -57,11 +57,10 @@ public class PetApiController implements PetApi {
      *         or Invalid pet value (status code 400)
      * @see PetApi#deletePet
      */
-    public ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    public ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -75,9 +74,10 @@ public class PetApiController implements PetApi {
      *         or Invalid status value (status code 400)
      * @see PetApi#findPetsByStatus
      */
-    public ResponseEntity<List<Pet>> 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) List<String> status
-
-, @springfox.documentation.annotations.ApiIgnore final Pageable pageable) {
+    public ResponseEntity<List<Pet>> 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) List<String> status,
+        @springfox.documentation.annotations.ApiIgnore final Pageable pageable
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
@@ -104,9 +104,10 @@ public class PetApiController implements PetApi {
      * @deprecated
      * @see PetApi#findPetsByTags
      */
-    public ResponseEntity<List<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
-
-, @springfox.documentation.annotations.ApiIgnore final Pageable pageable) {
+    public ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags,
+        @springfox.documentation.annotations.ApiIgnore final Pageable pageable
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
@@ -133,9 +134,9 @@ public class PetApiController implements PetApi {
      *         or Pet not found (status code 404)
      * @see PetApi#getPetById
      */
-    public ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    public ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"default-name\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"name\", \"id\" : 1 }, { \"name\" : \"name\", \"id\" : 1 } ], \"status\" : \"available\" }";
@@ -163,8 +164,8 @@ public class PetApiController implements PetApi {
      * @see PetApi#updatePet
      */
     public ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -178,13 +179,11 @@ public class PetApiController implements PetApi {
      * @return Invalid input (status code 405)
      * @see PetApi#updatePetWithForm
      */
-    public ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    public ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -198,13 +197,11 @@ public class PetApiController implements PetApi {
      * @return successful operation (status code 200)
      * @see PetApi#uploadFile
      */
-    public ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    public ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"code\" : 0, \"type\" : \"type\", \"message\" : \"message\" }";
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApi.java
index 25b01491b5077f8caf5f37e8336cb1453f96fc5d..cb72ccb357fd5bd8b4770f376faf8d7c23975b11 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -30,20 +30,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-);
+    ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    );
 
 
     /**
@@ -52,20 +55,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    ResponseEntity<Map<String, Integer>> getInventory();
+    ResponseEntity<Map<String, Integer>> getInventory(
+        
+    );
 
 
     /**
@@ -77,23 +88,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-);
+    ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    );
 
 
     /**
@@ -103,20 +117,24 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body);
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    );
 
 }
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApiController.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApiController.java
index 3922137098252cdfc95570fdfebc982aa92f9878..203faf80f73ca34ff5f7086614c3b8f7fad70a2d 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApiController.java
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApiController.java
@@ -42,9 +42,9 @@ public class StoreApiController implements StoreApi {
      *         or Order not found (status code 404)
      * @see StoreApi#deleteOrder
      */
-    public ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    public ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -56,7 +56,9 @@ public class StoreApiController implements StoreApi {
      * @return successful operation (status code 200)
      * @see StoreApi#getInventory
      */
-    public ResponseEntity<Map<String, Integer>> getInventory() {
+    public ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -71,9 +73,9 @@ public class StoreApiController implements StoreApi {
      *         or Order not found (status code 404)
      * @see StoreApi#getOrderById
      */
-    public ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    public ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
@@ -99,8 +101,8 @@ public class StoreApiController implements StoreApi {
      * @see StoreApi#placeOrder
      */
     public ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\" }";
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApi.java
index 4cbe795d92ad0765c78c6b1d117727af799d11dc..3f8d7b71b281f1f7e027fbf8f9aeb844ad49323a 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -30,18 +30,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body);
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    );
 
 
     /**
@@ -50,18 +54,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body);
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    );
 
 
     /**
@@ -70,18 +78,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body);
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    );
 
 
     /**
@@ -92,20 +104,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-);
+    ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    );
 
 
     /**
@@ -116,23 +131,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-);
+    ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    );
 
 
     /**
@@ -143,23 +161,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-);
+    ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    );
 
 
     /**
@@ -167,16 +188,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    ResponseEntity<Void> logoutUser();
+    ResponseEntity<Void> logoutUser(
+        
+    );
 
 
     /**
@@ -188,21 +215,23 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body);
+    ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    );
 
 }
diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApiController.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApiController.java
index a5441a06b6579a994d1416fb5db7e21e68a5b8aa..224d437db48a1bdbbdc49dd0e2377acd75b5ee75 100644
--- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApiController.java
+++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApiController.java
@@ -43,8 +43,8 @@ public class UserApiController implements UserApi {
      * @see UserApi#createUser
      */
     public ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -57,8 +57,8 @@ public class UserApiController implements UserApi {
      * @see UserApi#createUsersWithArrayInput
      */
     public ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -71,8 +71,8 @@ public class UserApiController implements UserApi {
      * @see UserApi#createUsersWithListInput
      */
     public ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -86,9 +86,9 @@ public class UserApiController implements UserApi {
      *         or User not found (status code 404)
      * @see UserApi#deleteUser
      */
-    public ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    public ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -102,9 +102,9 @@ public class UserApiController implements UserApi {
      *         or User not found (status code 404)
      * @see UserApi#getUserByName
      */
-    public ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    public ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
             if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
                 String exampleString = "{ \"firstName\" : \"firstName\", \"lastName\" : \"lastName\", \"password\" : \"password\", \"userStatus\" : 6, \"phone\" : \"phone\", \"id\" : 0, \"email\" : \"email\", \"username\" : \"username\" }";
@@ -130,11 +130,10 @@ public class UserApiController implements UserApi {
      *         or Invalid username/password supplied (status code 400)
      * @see UserApi#loginUser
      */
-    public ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    public ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -145,7 +144,9 @@ public class UserApiController implements UserApi {
      * @return successful operation (status code 200)
      * @see UserApi#logoutUser
      */
-    public ResponseEntity<Void> logoutUser() {
+    public ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -160,11 +161,10 @@ public class UserApiController implements UserApi {
      *         or User not found (status code 404)
      * @see UserApi#updateUser
      */
-    public ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    public ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
diff --git a/samples/server/petstore/springboot-spring-pageable/.openapi-generator/VERSION b/samples/server/petstore/springboot-spring-pageable/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot-spring-pageable/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot-spring-pageable/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot-spring-pageable/pom.xml b/samples/server/petstore/springboot-spring-pageable/pom.xml
index 38fbd7d57fa62a195b5c07ad01600cf4c2458f33..d0b710969509f45e0ca422fbe9df422f064b1eca 100644
--- a/samples/server/petstore/springboot-spring-pageable/pom.xml
+++ b/samples/server/petstore/springboot-spring-pageable/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,16 +38,17 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
@@ -63,12 +57,12 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 57e6c1d106723c45b01180e045a869a033abdf86..1667ef188aebc17f0a38b00f1a1db6c3a7172b83 100644
--- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,11 +36,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -48,8 +53,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java
index b494e974feba30a1132245bd88124b77bf689866..14af6c2921083fe3772e45449c0fdf1de82f96b8 100644
--- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -45,19 +45,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,19 +74,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -95,19 +104,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
@@ -129,19 +143,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -154,19 +173,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -179,19 +203,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -204,21 +232,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,11 +262,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -243,8 +279,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -280,50 +316,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 ",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -344,35 +370,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -390,28 +412,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -423,19 +444,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -448,21 +473,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -479,26 +507,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -512,28 +540,33 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 8b45339424f3c1d09282ff831e330a64d523b014..e2459cc308c617de7280b228738e8639282ebf6d 100644
--- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,14 +36,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -51,8 +56,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/PetApi.java
index d15f313c4c9e2024dad982a1d0a3dd37b53db117..dc4a8ace4c6f060355d334fda1289ce8b4a5d382 100644
--- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -37,25 +37,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -69,26 +74,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -102,25 +111,33 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-, @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable) {
+    default ResponseEntity<List<Pet>> 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) List<String> status,
+        @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -149,25 +166,33 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags
-
-, @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable) {
+    default ResponseEntity<List<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) List<String> tags,
+        @springfox.documentation.annotations.ApiIgnore final org.springframework.data.domain.Pageable pageable
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -196,26 +221,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -244,29 +272,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -280,27 +311,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -314,28 +349,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java
index d3a44c4e9c6763f98967d7bde447d0bf44e80a0f..19ab0bb614b675db53fe2de3cd170cd371169660 100644
--- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,20 +38,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -63,20 +66,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -91,23 +102,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -134,21 +148,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/UserApi.java
index 743aa88a6d29c2d5635ab5291559c6fa906d98f7..97583359e3b1ff06d9111685d8338f6ba4c5bb21 100644
--- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,18 +38,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -61,18 +65,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -84,18 +92,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -109,20 +121,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -136,23 +151,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -180,23 +198,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -207,16 +228,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,22 +258,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
diff --git a/samples/server/petstore/springboot-useoptional/.openapi-generator/VERSION b/samples/server/petstore/springboot-useoptional/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot-useoptional/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot-useoptional/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot-useoptional/pom.xml b/samples/server/petstore/springboot-useoptional/pom.xml
index bbfc822dfbac0f005df7c0db93b65ca7142a34ad..947ef54fb7eb25a47d98c6edeaff7c48bd3ecf69 100644
--- a/samples/server/petstore/springboot-useoptional/pom.xml
+++ b/samples/server/petstore/springboot-useoptional/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,16 +38,17 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
@@ -63,12 +57,12 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 57e6c1d106723c45b01180e045a869a033abdf86..1667ef188aebc17f0a38b00f1a1db6c3a7172b83 100644
--- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,11 +36,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -48,8 +53,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java
index bcfd41bee1658ab0539c288c25ee663cea4ed74b..8a9cd128c4634fa18c8a69fb949cc51de474577c 100644
--- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -45,19 +45,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,19 +74,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -95,19 +104,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
@@ -129,19 +143,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -154,19 +173,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -179,19 +203,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -204,21 +232,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,11 +262,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -243,8 +279,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -280,50 +316,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -344,35 +370,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) Optional<List<String>> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) Optional<String> enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) Optional<List<String>> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") Optional<String> enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Optional<Integer> enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Optional<Double> enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) Optional<List<String>> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) Optional<String> enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) Optional<List<String>> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") Optional<String> enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Optional<Integer> enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Optional<Double> enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -390,28 +412,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Optional<Integer> stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Optional<Boolean> booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Optional<Long> int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Optional<Integer> stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Optional<Boolean> booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Optional<Long> int64Group
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -423,19 +444,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -448,21 +473,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -479,26 +507,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -512,28 +540,33 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 8b45339424f3c1d09282ff831e330a64d523b014..e2459cc308c617de7280b228738e8639282ebf6d 100644
--- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,14 +36,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -51,8 +56,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java
index 027746a2e5b1bec26f6df8046bcb6e67489b1b75..a5de2295a5827a0b2359ff150a9b538ae8b3dac0 100644
--- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,25 +38,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,26 +75,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) Optional<String> apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) Optional<String> apiKey
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -103,25 +112,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-) {
+    default ResponseEntity<List<Pet>> 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) List<String> status
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -150,25 +166,32 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Set<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-) {
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -197,26 +220,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -245,29 +271,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -281,27 +310,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -315,28 +348,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java
index d3a44c4e9c6763f98967d7bde447d0bf44e80a0f..19ab0bb614b675db53fe2de3cd170cd371169660 100644
--- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,20 +38,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -63,20 +66,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -91,23 +102,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -134,21 +148,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java
index 743aa88a6d29c2d5635ab5291559c6fa906d98f7..97583359e3b1ff06d9111685d8338f6ba4c5bb21 100644
--- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,18 +38,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -61,18 +65,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -84,18 +92,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -109,20 +121,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -136,23 +151,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -180,23 +198,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -207,16 +228,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,22 +258,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
diff --git a/samples/server/petstore/springboot-virtualan/.openapi-generator/VERSION b/samples/server/petstore/springboot-virtualan/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot-virtualan/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot-virtualan/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot-virtualan/pom.xml b/samples/server/petstore/springboot-virtualan/pom.xml
index 920b8d600891e3923f0241e83bf621b7da93b62a..dd52e11911b6c18fe1901746c0bb8d7c4d1490e5 100644
--- a/samples/server/petstore/springboot-virtualan/pom.xml
+++ b/samples/server/petstore/springboot-virtualan/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,16 +38,17 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
@@ -63,12 +57,12 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
     <!-- START Virtual Service API support -->
         <dependency>
diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/AnotherFakeApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/AnotherFakeApi.java
index 575fd8a2ae27ac966bc286218b8813f560d5920f..6504bc555c21b34c9d31f1ba8d0fe3f33cebe690 100644
--- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -40,11 +40,16 @@ public interface AnotherFakeApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -52,8 +57,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeApi.java
index a85c742451af29d48f02aeb45d83555509c14cd4..8cfa7936f84466dced7a430fdf004d4c784ab055 100644
--- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeApi.java
+++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -49,19 +49,23 @@ public interface FakeApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -75,19 +79,24 @@ public interface FakeApi {
      * @return Output boolean (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -101,19 +110,24 @@ public interface FakeApi {
      * @return Output composite (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
@@ -136,19 +150,24 @@ public interface FakeApi {
      * @return Output number (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -162,19 +181,24 @@ public interface FakeApi {
      * @return Output string (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -188,19 +212,23 @@ public interface FakeApi {
      * @return Success (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -214,21 +242,24 @@ public interface FakeApi {
      * @return Success (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -242,11 +273,16 @@ public interface FakeApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -254,8 +290,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -292,50 +328,40 @@ public interface FakeApi {
      *         or User not found (status code 404)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -357,35 +383,31 @@ public interface FakeApi {
      *         or Not found (status code 404)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -404,28 +426,27 @@ public interface FakeApi {
      * @return Someting wrong (status code 400)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -438,19 +459,23 @@ public interface FakeApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -464,21 +489,24 @@ public interface FakeApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -496,26 +524,26 @@ public interface FakeApi {
      * @return Success (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -530,28 +558,33 @@ public interface FakeApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeClassnameTestApi.java
index 7b1b825d386b4d51bb4ccfdbcfb88b123c27e4d0..4eb9dd69cdda714f54f05c2431fc5cc86aea985b 100644
--- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -40,14 +40,19 @@ public interface FakeClassnameTestApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -55,8 +60,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/PetApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/PetApi.java
index 28c60937d7a893a11770d7976c6f0d86c1fc2976..cc2491e204ffdbb37ea883438857bcf37deef1dc 100644
--- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/PetApi.java
+++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -42,25 +42,30 @@ public interface PetApi {
      *         or Invalid input (status code 405)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -75,26 +80,30 @@ public interface PetApi {
      *         or Invalid pet value (status code 400)
      */
     @ApiVirtual
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -109,25 +118,32 @@ public interface PetApi {
      *         or Invalid status value (status code 400)
      */
     @ApiVirtual
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-) {
+    default ResponseEntity<List<Pet>> 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) List<String> status
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -157,25 +173,32 @@ public interface PetApi {
      * @deprecated
      */
     @ApiVirtual
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Set<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-) {
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -205,26 +228,29 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -254,29 +280,32 @@ public interface PetApi {
      *         or Validation exception (status code 405)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -291,27 +320,31 @@ public interface PetApi {
      * @return Invalid input (status code 405)
      */
     @ApiVirtual
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -326,28 +359,33 @@ public interface PetApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/StoreApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/StoreApi.java
index d20e937d032649f6cf1392052b7d0b9f5eb2892b..3a23f5a91257fa1a5c9627d4a6c5e304c2b3643a 100644
--- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/StoreApi.java
+++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -42,20 +42,23 @@ public interface StoreApi {
      *         or Order not found (status code 404)
      */
     @ApiVirtual
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -68,20 +71,28 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -97,23 +108,26 @@ public interface StoreApi {
      *         or Order not found (status code 404)
      */
     @ApiVirtual
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -141,21 +155,25 @@ public interface StoreApi {
      *         or Invalid Order (status code 400)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/UserApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/UserApi.java
index c6f02bef5d1ca1ef693c023900825c4ad1b90a33..9d2430db56286d20062f278793cae4712dc48270 100644
--- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/UserApi.java
+++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -42,18 +42,22 @@ public interface UserApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -66,18 +70,22 @@ public interface UserApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -90,18 +98,22 @@ public interface UserApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -116,20 +128,23 @@ public interface UserApi {
      *         or User not found (status code 404)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -144,23 +159,26 @@ public interface UserApi {
      *         or User not found (status code 404)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -189,23 +207,26 @@ public interface UserApi {
      *         or Invalid username/password supplied (status code 400)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -217,16 +238,22 @@ public interface UserApi {
      * @return successful operation (status code 200)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -242,22 +269,24 @@ public interface UserApi {
      *         or User not found (status code 404)
      */
     @ApiVirtual
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
diff --git a/samples/server/petstore/springboot/.openapi-generator/VERSION b/samples/server/petstore/springboot/.openapi-generator/VERSION
index 7d3cdbf0dd0433b2a8589c36740e4707bde2db62..0984c4c1ad213d3a352049ad557efc9bd5140752 100644
--- a/samples/server/petstore/springboot/.openapi-generator/VERSION
+++ b/samples/server/petstore/springboot/.openapi-generator/VERSION
@@ -1 +1 @@
-5.3.1
\ No newline at end of file
+5.4.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/server/petstore/springboot/pom.xml b/samples/server/petstore/springboot/pom.xml
index 62aa1140a3ef945c6a277198ee65d3b9d80c23f2..2388f8831b10ce0419abb7314fb164f29009713e 100644
--- a/samples/server/petstore/springboot/pom.xml
+++ b/samples/server/petstore/springboot/pom.xml
@@ -9,12 +9,12 @@
         <java.version>1.8</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
-        <springfox-version>2.9.2</springfox-version>
+        <springfox.version>2.9.2</springfox.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
+        <version>2.5.8</version>
     </parent>
     <build>
         <sourceDirectory>src/main/java</sourceDirectory>
@@ -22,13 +22,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>
@@ -45,16 +38,17 @@
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>${springfox-version}</version>
+            <version>${springfox.version}</version>
         </dependency>
+        <!-- @Nullable annotation -->
         <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${springfox-version}</version>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
@@ -63,12 +57,12 @@
         <dependency>
             <groupId>org.openapitools</groupId>
             <artifactId>jackson-databind-nullable</artifactId>
-            <version>0.2.1</version>
+            <version>0.2.2</version>
         </dependency>
-    <!-- Bean Validation API support -->
+        <!-- Bean Validation API support -->
         <dependency>
-            <groupId>jakarta.validation</groupId>
-            <artifactId>jakarta.validation-api</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/AnotherFakeApi.java
index 57e6c1d106723c45b01180e045a869a033abdf86..1667ef188aebc17f0a38b00f1a1db6c3a7172b83 100644
--- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/AnotherFakeApi.java
+++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,11 +36,16 @@ public interface AnotherFakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test special tags", nickname = "call123testSpecialTags", notes = "To test special tags and operation ID starting with number", response = Client.class, tags={ "$another-fake?", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "$another-fake?" },
+        value = "To test special tags",
+        nickname = "call123testSpecialTags",
+        notes = "To test special tags and operation ID starting with number",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/another-fake/dummy",
@@ -48,8 +53,8 @@ public interface AnotherFakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> call123testSpecialTags(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeApi.java
index dfa1803e162df32ef6defef5e87cf40582a28fa5..71ffda67b0c260df3701011681b7279bbc11f5da 100644
--- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeApi.java
+++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -45,19 +45,23 @@ public interface FakeApi {
      * @param xmlItem XmlItem Body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "creates an XmlItem", nickname = "createXmlItem", notes = "this route creates an XmlItem", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "creates an XmlItem",
+        nickname = "createXmlItem",
+        notes = "this route creates an XmlItem"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/create_xml_item",
         consumes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }
     )
     default ResponseEntity<Void> createXmlItem(
-
-@ApiParam(value = "XmlItem Body", required = true )   @Valid @RequestBody XmlItem xmlItem) {
+        @ApiParam(value = "XmlItem Body", required = true) @Valid @RequestBody XmlItem xmlItem
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,19 +74,24 @@ public interface FakeApi {
      * @param body Input boolean as post body (optional)
      * @return Output boolean (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterBooleanSerialize", notes = "Test serialization of outer boolean types", response = Boolean.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterBooleanSerialize",
+        notes = "Test serialization of outer boolean types",
+        response = Boolean.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output boolean", response = Boolean.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/boolean",
         produces = { "*/*" }
     )
     default ResponseEntity<Boolean> fakeOuterBooleanSerialize(
-
-@ApiParam(value = "Input boolean as post body" )   @Valid @RequestBody(required = false) Boolean body) {
+        @ApiParam(value = "Input boolean as post body") @Valid @RequestBody(required = false) Boolean body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -95,19 +104,24 @@ public interface FakeApi {
      * @param body Input composite as post body (optional)
      * @return Output composite (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterCompositeSerialize", notes = "Test serialization of object with outer number type", response = OuterComposite.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterCompositeSerialize",
+        notes = "Test serialization of object with outer number type",
+        response = OuterComposite.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output composite", response = OuterComposite.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/composite",
         produces = { "*/*" }
     )
     default ResponseEntity<OuterComposite> fakeOuterCompositeSerialize(
-
-@ApiParam(value = "Input composite as post body" )   @Valid @RequestBody(required = false) OuterComposite body) {
+        @ApiParam(value = "Input composite as post body") @Valid @RequestBody(required = false) OuterComposite body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("*/*"))) {
@@ -129,19 +143,24 @@ public interface FakeApi {
      * @param body Input number as post body (optional)
      * @return Output number (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterNumberSerialize", notes = "Test serialization of outer number types", response = BigDecimal.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterNumberSerialize",
+        notes = "Test serialization of outer number types",
+        response = BigDecimal.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output number", response = BigDecimal.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/number",
         produces = { "*/*" }
     )
     default ResponseEntity<BigDecimal> fakeOuterNumberSerialize(
-
-@ApiParam(value = "Input number as post body" )   @Valid @RequestBody(required = false) BigDecimal body) {
+        @ApiParam(value = "Input number as post body") @Valid @RequestBody(required = false) BigDecimal body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -154,19 +173,24 @@ public interface FakeApi {
      * @param body Input string as post body (optional)
      * @return Output string (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "fakeOuterStringSerialize", notes = "Test serialization of outer string types", response = String.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Output string", response = String.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "fakeOuterStringSerialize",
+        notes = "Test serialization of outer string types",
+        response = String.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Output string", response = String.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/outer/string",
         produces = { "*/*" }
     )
     default ResponseEntity<String> fakeOuterStringSerialize(
-
-@ApiParam(value = "Input string as post body" )   @Valid @RequestBody(required = false) String body) {
+        @ApiParam(value = "Input string as post body") @Valid @RequestBody(required = false) String body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -179,19 +203,23 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithFileSchema", notes = "For this test, the body for this request much reference a schema named `File`.", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithFileSchema",
+        notes = "For this test, the body for this request much reference a schema named `File`."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-file-schema",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testBodyWithFileSchema(
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody FileSchemaTestClass body) {
+        @ApiParam(value = "", required = true) @Valid @RequestBody FileSchemaTestClass body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -204,21 +232,24 @@ public interface FakeApi {
      * @param body  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testBodyWithQueryParams", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testBodyWithQueryParams",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/body-with-query-params",
         consumes = { "application/json" }
     )
-    default ResponseEntity<Void> testBodyWithQueryParams(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query
-
-,
-
-@ApiParam(value = "", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> testBodyWithQueryParams(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "query", required = true) String query,
+        @ApiParam(value = "", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,11 +262,16 @@ public interface FakeApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test \"client\" model", nickname = "testClientModel", notes = "To test \"client\" model", response = Client.class, tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test \"client\" model",
+        nickname = "testClientModel",
+        notes = "To test \"client\" model",
+        response = Client.class
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake",
@@ -243,8 +279,8 @@ public interface FakeApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClientModel(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -280,50 +316,40 @@ public interface FakeApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", nickname = "testEndpointParameters", notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트", authorizations = {
-        
-        @Authorization(value = "http_basic_test")
-         }, tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        nickname = "testEndpointParameters",
+        notes = "Fake endpoint for testing various parameters  假端點  偽のエンドポイント  가짜 엔드 포인트",
+        authorizations = {
+            @Authorization(value = "http_basic_test")
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEndpointParameters(
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
-
-@ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "binary", required = false) MultipartFile binary,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) LocalDate date,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) OffsetDateTime dateTime,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
-
-@ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback) {
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "number", required = true) BigDecimal number,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "double", required = true) Double _double,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+        @ApiParam(value = "None", required = true) @Valid @RequestPart(value = "byte", required = true) byte[] _byte,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "integer", required = false) Integer integer,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int32", required = false) Integer int32,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "int64", required = false) Long int64,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "float", required = false) Float _float,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "string", required = false) String string,
+        @ApiParam(value = "None") @RequestPart(value = "binary", required = false) MultipartFile binary,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "date", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) LocalDate date,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "dateTime", required = false) @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "password", required = false) String password,
+        @ApiParam(value = "None") @Valid @RequestPart(value = "callback", required = false) String paramCallback
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -344,35 +370,31 @@ public interface FakeApi {
      * @return Invalid request (status code 400)
      *         or Not found (status code 404)
      */
-
-    @ApiOperation(value = "To test enum parameters", nickname = "testEnumParameters", notes = "To test enum parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "fake" },
+        value = "To test enum parameters",
+        nickname = "testEnumParameters",
+        notes = "To test enum parameters"
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid request"),
-
-        @ApiResponse(code = 404, message = "Not found") })
+        @ApiResponse(code = 404, message = "Not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testEnumParameters(
-@ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray
-,
-@ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString
-,@ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray
-
-,@ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger
-
-,@ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble
-
-,
-
-@ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
-
-@ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString) {
+        @ApiParam(value = "Header parameter enum test (string array)", allowableValues = ">, $") @RequestHeader(value = "enum_header_string_array", required = false) List<String> enumHeaderStringArray,
+        @ApiParam(value = "Header parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @RequestHeader(value = "enum_header_string", required = false) String enumHeaderString,
+        @ApiParam(value = "Query parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestParam(value = "enum_query_string_array", required = false) List<String> enumQueryStringArray,
+        @ApiParam(value = "Query parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1, -2") @Valid @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+        @ApiParam(value = "Query parameter enum test (double)", allowableValues = "1.1, -1.2") @Valid @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+        @ApiParam(value = "Form parameter enum test (string array)", allowableValues = ">, $") @Valid @RequestPart(value = "enum_form_string_array", required = false) List<String> enumFormStringArray,
+        @ApiParam(value = "Form parameter enum test (string)", allowableValues = "_abc, -efg, (xyz)", defaultValue = "-efg") @Valid @RequestPart(value = "enum_form_string", required = false) String enumFormString
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -390,28 +412,27 @@ public interface FakeApi {
      * @param int64Group Integer in group parameters (optional)
      * @return Someting wrong (status code 400)
      */
-
-    @ApiOperation(value = "Fake endpoint to test group parameters (optional)", nickname = "testGroupParameters", notes = "Fake endpoint to test group parameters (optional)", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 400, message = "Someting wrong") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "Fake endpoint to test group parameters (optional)",
+        nickname = "testGroupParameters",
+        notes = "Fake endpoint to test group parameters (optional)"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 400, message = "Someting wrong")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/fake"
     )
-    default ResponseEntity<Void> testGroupParameters(@NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup
-
-,
-@ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup
-,@NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group
-
-,@ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup
-
-,
-@ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup
-,@ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
-
-) {
+    default ResponseEntity<Void> testGroupParameters(
+        @NotNull @ApiParam(value = "Required String in group parameters", required = true) @Valid @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+        @ApiParam(value = "Required Boolean in group parameters", required = true) @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+        @NotNull @ApiParam(value = "Required Integer in group parameters", required = true) @Valid @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+        @ApiParam(value = "String in group parameters") @Valid @RequestParam(value = "string_group", required = false) Integer stringGroup,
+        @ApiParam(value = "Boolean in group parameters") @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+        @ApiParam(value = "Integer in group parameters") @Valid @RequestParam(value = "int64_group", required = false) Long int64Group
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -423,19 +444,23 @@ public interface FakeApi {
      * @param param request body (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test inline additionalProperties", nickname = "testInlineAdditionalProperties", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test inline additionalProperties",
+        nickname = "testInlineAdditionalProperties",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/inline-additionalProperties",
         consumes = { "application/json" }
     )
     default ResponseEntity<Void> testInlineAdditionalProperties(
-
-@ApiParam(value = "request body", required = true )   @Valid @RequestBody Map<String, String> param) {
+        @ApiParam(value = "request body", required = true) @Valid @RequestBody Map<String, String> param
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -448,21 +473,24 @@ public interface FakeApi {
      * @param param2 field2 (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "test json serialization of form data", nickname = "testJsonFormData", notes = "", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "test json serialization of form data",
+        nickname = "testJsonFormData",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/fake/jsonFormData",
         consumes = { "application/x-www-form-urlencoded" }
     )
     default ResponseEntity<Void> testJsonFormData(
-
-@ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
-
-@ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2) {
+        @ApiParam(value = "field1", required = true) @Valid @RequestPart(value = "param", required = true) String param,
+        @ApiParam(value = "field2", required = true) @Valid @RequestPart(value = "param2", required = true) String param2
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -479,26 +507,26 @@ public interface FakeApi {
      * @param context  (required)
      * @return Success (status code 200)
      */
-
-    @ApiOperation(value = "", nickname = "testQueryParameterCollectionFormat", notes = "To test the collection format in query parameters", tags={ "fake", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "Success") })
+    @ApiOperation(
+        tags = { "fake" },
+        value = "",
+        nickname = "testQueryParameterCollectionFormat",
+        notes = "To test the collection format in query parameters"
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "Success")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/fake/test-query-parameters"
     )
-    default ResponseEntity<Void> testQueryParameterCollectionFormat(@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url
-
-,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
-
-) {
+    default ResponseEntity<Void> testQueryParameterCollectionFormat(
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "pipe", required = true) List<String> pipe,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "ioutil", required = true) List<String> ioutil,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "http", required = true) List<String> http,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "url", required = true) List<String> url,
+        @NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "context", required = true) List<String> context
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -512,28 +540,33 @@ public interface FakeApi {
      * @param additionalMetadata Additional data to pass to server (optional)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "uploads an image (required)", nickname = "uploadFileWithRequiredFile", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        value = "uploads an image (required)",
+        nickname = "uploadFileWithRequiredFile",
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/fake/{petId}/uploadImageWithRequiredFile",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata) {
+    default ResponseEntity<ModelApiResponse> uploadFileWithRequiredFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
index 8b45339424f3c1d09282ff831e330a64d523b014..e2459cc308c617de7280b228738e8639282ebf6d 100644
--- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
+++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeClassnameTestApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -36,14 +36,19 @@ public interface FakeClassnameTestApi {
      * @param body client model (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "To test class name in snake case", nickname = "testClassname", notes = "To test class name in snake case", response = Client.class, authorizations = {
-        
-        @Authorization(value = "api_key_query")
-         }, tags={ "fake_classname_tags 123#$%^", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Client.class) })
+    @ApiOperation(
+        tags = { "fake_classname_tags 123#$%^" },
+        value = "To test class name in snake case",
+        nickname = "testClassname",
+        notes = "To test class name in snake case",
+        response = Client.class,
+        authorizations = {
+            @Authorization(value = "api_key_query")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Client.class)
+    })
     @RequestMapping(
         method = RequestMethod.PATCH,
         value = "/fake_classname_test",
@@ -51,8 +56,8 @@ public interface FakeClassnameTestApi {
         consumes = { "application/json" }
     )
     default ResponseEntity<Client> testClassname(
-
-@ApiParam(value = "client model", required = true )   @Valid @RequestBody Client body) {
+        @ApiParam(value = "client model", required = true) @Valid @RequestBody Client body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java
index 693ce02c51e9754b69e6fca2013f025a95524687..e969bf667650a1e19e0b45b3a4be642a70ddff72 100644
--- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,25 +38,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid input (status code 405)
      */
-
-    @ApiOperation(value = "Add a new pet to the store", nickname = "addPet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Add a new pet to the store",
+        nickname = "addPet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> addPet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -70,26 +75,30 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid pet value (status code 400)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
-        @ApiResponse(code = 400, message = "Invalid pet value") })
+        @ApiResponse(code = 400, message = "Invalid pet value")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/pet/{petId}"
     )
-    default ResponseEntity<Void> deletePet(@ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId
-
-,
-@ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
-) {
+    default ResponseEntity<Void> deletePet(
+        @ApiParam(value = "Pet id to delete", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "") @RequestHeader(value = "api_key", required = false) String apiKey
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -103,25 +112,32 @@ public interface PetApi {
      * @return successful operation (status code 200)
      *         or Invalid status value (status code 400)
      */
-
-    @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 = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "write:pets", description = "modify pets in your account"),
+                @AuthorizationScope(scope = "read:pets", description = "read your pets")
+            })
+         }
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "List"),
-
-        @ApiResponse(code = 400, message = "Invalid status value") })
+        @ApiResponse(code = 400, message = "Invalid status value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByStatus",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<List<Pet>> 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) List<String> status
-
-) {
+    default ResponseEntity<List<Pet>> 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) List<String> status
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -150,25 +166,32 @@ public interface PetApi {
      *         or Invalid tag value (status code 400)
      * @deprecated
      */
-
-    @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 = "Set", authorizations = {
-        @Authorization(value = "petstore_auth", scopes = {
-            @AuthorizationScope(scope = "write:pets", description = "modify pets in your account"),
-            @AuthorizationScope(scope = "read:pets", description = "read your pets") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        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 = "Set",
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Pet.class, responseContainer = "Set"),
-
-        @ApiResponse(code = 400, message = "Invalid tag value") })
+        @ApiResponse(code = 400, message = "Invalid tag value")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/findByTags",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Set<Pet>> findPetsByTags(@NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
-
-) {
+    default ResponseEntity<Set<Pet>> findPetsByTags(
+        @NotNull @ApiParam(value = "Tags to filter by", required = true) @Valid @RequestParam(value = "tags", required = true) Set<String> tags
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -197,26 +220,29 @@ public interface PetApi {
      *         or Invalid ID supplied (status code 400)
      *         or Pet not found (status code 404)
      */
-
-    @ApiOperation(value = "Find pet by ID", nickname = "getPetById", notes = "Returns a single pet", response = Pet.class, authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Find pet by ID",
+        nickname = "getPetById",
+        notes = "Returns a single pet",
+        response = Pet.class,
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
         @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 = 404, message = "Pet not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/pet/{petId}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Pet> getPetById(@ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
-
-) {
+    default ResponseEntity<Pet> getPetById(
+        @ApiParam(value = "ID of pet to return", required = true) @PathVariable("petId") Long petId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -245,29 +271,32 @@ public interface PetApi {
      *         or Pet not found (status code 404)
      *         or Validation exception (status code 405)
      */
-
-    @ApiOperation(value = "Update an existing pet", nickname = "updatePet", 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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "pet" },
+        value = "Update an existing pet",
+        nickname = "updatePet",
+        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({
         @ApiResponse(code = 200, message = "successful operation"),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
         @ApiResponse(code = 404, message = "Pet not found"),
-
-        @ApiResponse(code = 405, message = "Validation exception") })
+        @ApiResponse(code = 405, message = "Validation exception")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/pet",
         consumes = { "application/json", "application/xml" }
     )
     default ResponseEntity<Void> updatePet(
-
-@ApiParam(value = "Pet object that needs to be added to the store", required = true )   @Valid @RequestBody Pet body) {
+        @ApiParam(value = "Pet object that needs to be added to the store", required = true) @Valid @RequestBody Pet body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -281,27 +310,31 @@ public interface PetApi {
      * @param status Updated status of the pet (optional)
      * @return Invalid input (status code 405)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 405, message = "Invalid input") })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 405, message = "Invalid input")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}",
         consumes = { "application/x-www-form-urlencoded" }
     )
-    default ResponseEntity<Void> updatePetWithForm(@ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
-
-@ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status) {
+    default ResponseEntity<Void> updatePetWithForm(
+        @ApiParam(value = "ID of pet that needs to be updated", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Updated name of the pet") @Valid @RequestPart(value = "name", required = false) String name,
+        @ApiParam(value = "Updated status of the pet") @Valid @RequestPart(value = "status", required = false) String status
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -315,28 +348,33 @@ public interface PetApi {
      * @param file file to upload (optional)
      * @return successful operation (status code 200)
      */
-
-    @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") })
-         }, tags={ "pet", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class) })
+    @ApiOperation(
+        tags = { "pet" },
+        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({
+        @ApiResponse(code = 200, message = "successful operation", response = ModelApiResponse.class)
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/pet/{petId}/uploadImage",
         produces = { "application/json" },
         consumes = { "multipart/form-data" }
     )
-    default ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId
-
-,
-
-@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
-
-@ApiParam(value = "file to upload") @Valid @RequestPart(value = "file", required = false) MultipartFile file) {
+    default ResponseEntity<ModelApiResponse> uploadFile(
+        @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
+        @ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
+        @ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) MultipartFile file
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java
index d3a44c4e9c6763f98967d7bde447d0bf44e80a0f..19ab0bb614b675db53fe2de3cd170cd371169660 100644
--- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java
+++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,20 +38,23 @@ public interface StoreApi {
      * @return Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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", tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/store/order/{order_id}"
     )
-    default ResponseEntity<Void> deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
-
-) {
+    default ResponseEntity<Void> deleteOrder(
+        @ApiParam(value = "ID of the order that needs to be deleted", required = true) @PathVariable("order_id") String orderId
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -63,20 +66,28 @@ public interface StoreApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Returns pet inventories by status", nickname = "getInventory", notes = "Returns a map of status codes to quantities", response = Integer.class, responseContainer = "Map", authorizations = {
-        
-        @Authorization(value = "api_key")
-         }, tags={ "store", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map") })
+    @ApiOperation(
+        tags = { "store" },
+        value = "Returns pet inventories by status",
+        nickname = "getInventory",
+        notes = "Returns a map of status codes to quantities",
+        response = Integer.class,
+        responseContainer = "Map",
+        authorizations = {
+            @Authorization(value = "api_key")
+         }
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation", response = Map.class, responseContainer = "Map")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/inventory",
         produces = { "application/json" }
     )
-    default ResponseEntity<Map<String, Integer>> getInventory() {
+    default ResponseEntity<Map<String, Integer>> getInventory(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -91,23 +102,26 @@ public interface StoreApi {
      *         or Invalid ID supplied (status code 400)
      *         or Order not found (status code 404)
      */
-
-    @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, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        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({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
         @ApiResponse(code = 400, message = "Invalid ID supplied"),
-
-        @ApiResponse(code = 404, message = "Order not found") })
+        @ApiResponse(code = 404, message = "Order not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/store/order/{order_id}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<Order> getOrderById(@Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
-
-) {
+    default ResponseEntity<Order> getOrderById(
+        @Min(1L) @Max(5L) @ApiParam(value = "ID of pet that needs to be fetched", required = true) @PathVariable("order_id") Long orderId
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -134,21 +148,25 @@ public interface StoreApi {
      * @return successful operation (status code 200)
      *         or Invalid Order (status code 400)
      */
-
-    @ApiOperation(value = "Place an order for a pet", nickname = "placeOrder", notes = "", response = Order.class, tags={ "store", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "store" },
+        value = "Place an order for a pet",
+        nickname = "placeOrder",
+        notes = "",
+        response = Order.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = Order.class),
-
-        @ApiResponse(code = 400, message = "Invalid Order") })
+        @ApiResponse(code = 400, message = "Invalid Order")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/store/order",
         produces = { "application/xml", "application/json" }
     )
     default ResponseEntity<Order> placeOrder(
-
-@ApiParam(value = "order placed for purchasing the pet", required = true )   @Valid @RequestBody Order body) {
+        @ApiParam(value = "order placed for purchasing the pet", required = true) @Valid @RequestBody Order body
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java
index 743aa88a6d29c2d5635ab5291559c6fa906d98f7..97583359e3b1ff06d9111685d8338f6ba4c5bb21 100644
--- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java
+++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java
@@ -1,5 +1,5 @@
 /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.3.1).
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.4.0-SNAPSHOT).
  * https://openapi-generator.tech
  * Do not edit the class manually.
  */
@@ -38,18 +38,22 @@ public interface UserApi {
      * @param body Created user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Create user", nickname = "createUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Create user",
+        nickname = "createUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user"
     )
     default ResponseEntity<Void> createUser(
-
-@ApiParam(value = "Created user object", required = true )   @Valid @RequestBody User body) {
+        @ApiParam(value = "Created user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -61,18 +65,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithArrayInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithArrayInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithArray"
     )
     default ResponseEntity<Void> createUsersWithArrayInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -84,18 +92,22 @@ public interface UserApi {
      * @param body List of user object (required)
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Creates list of users with given input array", nickname = "createUsersWithListInput", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Creates list of users with given input array",
+        nickname = "createUsersWithListInput",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.POST,
         value = "/user/createWithList"
     )
     default ResponseEntity<Void> createUsersWithListInput(
-
-@ApiParam(value = "List of user object", required = true )   @Valid @RequestBody List<User> body) {
+        @ApiParam(value = "List of user object", required = true) @Valid @RequestBody List<User> body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -109,20 +121,23 @@ public interface UserApi {
      * @return Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Delete user", nickname = "deleteUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Delete user",
+        nickname = "deleteUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.DELETE,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> deleteUser(@ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<Void> deleteUser(
+        @ApiParam(value = "The name that needs to be deleted", required = true) @PathVariable("username") String username
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -136,23 +151,26 @@ public interface UserApi {
      *         or Invalid username supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Get user by user name", nickname = "getUserByName", notes = "", response = User.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Get user by user name",
+        nickname = "getUserByName",
+        notes = "",
+        response = User.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = User.class),
-
         @ApiResponse(code = 400, message = "Invalid username supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/{username}",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<User> getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
-
-) {
+    default ResponseEntity<User> getUserByName(
+        @ApiParam(value = "The name that needs to be fetched. Use user1 for testing.", required = true) @PathVariable("username") String username
+    ) {
         getRequest().ifPresent(request -> {
             for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) {
                 if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) {
@@ -180,23 +198,26 @@ public interface UserApi {
      * @return successful operation (status code 200)
      *         or Invalid username/password supplied (status code 400)
      */
-
-    @ApiOperation(value = "Logs user into the system", nickname = "loginUser", notes = "", response = String.class, tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs user into the system",
+        nickname = "loginUser",
+        notes = "",
+        response = String.class
+    )
+    @ApiResponses({
         @ApiResponse(code = 200, message = "successful operation", response = String.class),
-
-        @ApiResponse(code = 400, message = "Invalid username/password supplied") })
+        @ApiResponse(code = 400, message = "Invalid username/password supplied")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/login",
         produces = { "application/xml", "application/json" }
     )
-    default ResponseEntity<String> loginUser(@NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username
-
-,@NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
-
-) {
+    default ResponseEntity<String> loginUser(
+        @NotNull @ApiParam(value = "The user name for login", required = true) @Valid @RequestParam(value = "username", required = true) String username,
+        @NotNull @ApiParam(value = "The password for login in clear text", required = true) @Valid @RequestParam(value = "password", required = true) String password
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -207,16 +228,22 @@ public interface UserApi {
      *
      * @return successful operation (status code 200)
      */
-
-    @ApiOperation(value = "Logs out current logged in user session", nickname = "logoutUser", notes = "", tags={ "user", })
-    @ApiResponses(value = { 
-
-        @ApiResponse(code = 200, message = "successful operation") })
+    @ApiOperation(
+        tags = { "user" },
+        value = "Logs out current logged in user session",
+        nickname = "logoutUser",
+        notes = ""
+    )
+    @ApiResponses({
+        @ApiResponse(code = 200, message = "successful operation")
+    })
     @RequestMapping(
         method = RequestMethod.GET,
         value = "/user/logout"
     )
-    default ResponseEntity<Void> logoutUser() {
+    default ResponseEntity<Void> logoutUser(
+        
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }
@@ -231,22 +258,24 @@ public interface UserApi {
      * @return Invalid user supplied (status code 400)
      *         or User not found (status code 404)
      */
-
-    @ApiOperation(value = "Updated user", nickname = "updateUser", notes = "This can only be done by the logged in user.", tags={ "user", })
-    @ApiResponses(value = { 
-
+    @ApiOperation(
+        tags = { "user" },
+        value = "Updated user",
+        nickname = "updateUser",
+        notes = "This can only be done by the logged in user."
+    )
+    @ApiResponses({
         @ApiResponse(code = 400, message = "Invalid user supplied"),
-
-        @ApiResponse(code = 404, message = "User not found") })
+        @ApiResponse(code = 404, message = "User not found")
+    })
     @RequestMapping(
         method = RequestMethod.PUT,
         value = "/user/{username}"
     )
-    default ResponseEntity<Void> updateUser(@ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username
-
-,
-
-@ApiParam(value = "Updated user object", required = true )   @Valid @RequestBody User body) {
+    default ResponseEntity<Void> updateUser(
+        @ApiParam(value = "name that need to be deleted", required = true) @PathVariable("username") String username,
+        @ApiParam(value = "Updated user object", required = true) @Valid @RequestBody User body
+    ) {
         return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
 
     }