diff --git a/.github/workflows/samples-jdk17.yaml b/.github/workflows/samples-jdk17.yaml
index 6d89ce09da00..ceb2b84ac930 100644
--- a/.github/workflows/samples-jdk17.yaml
+++ b/.github/workflows/samples-jdk17.yaml
@@ -6,6 +6,8 @@ on:
- samples/openapi3/client/petstore/spring-cloud-3/**
- samples/client/petstore/java-helidon-client/mp/**
- samples/client/petstore/java-helidon-client/se/**
+ - samples/client/petstore/spring-http-interface-reactive/**
+ - samples/client/petstore/spring-http-interface/**
# servers
- samples/openapi3/server/petstore/springboot-3/**
- samples/server/petstore/java-helidon-server/mp/**
@@ -16,6 +18,8 @@ on:
- samples/openapi3/client/petstore/spring-cloud-3/**
- samples/client/petstore/java-helidon-client/mp/**
- samples/client/petstore/java-helidon-client/se/**
+ - samples/client/petstore/spring-http-interface-reactive/**
+ - samples/client/petstore/spring-http-interface/**
# servers
- samples/openapi3/server/petstore/springboot-3/**
- samples/server/petstore/java-helidon-server/mp/**
@@ -32,10 +36,14 @@ jobs:
- samples/openapi3/client/petstore/spring-cloud-3
- samples/client/petstore/java-helidon-client/mp
- samples/client/petstore/java-helidon-client/se
+ - samples/client/petstore/spring-http-interface-reactive
+ - samples/client/petstore/spring-http-interface
# servers
- samples/openapi3/server/petstore/springboot-3
- samples/server/petstore/java-helidon-server/mp
- samples/server/petstore/java-helidon-server/se
+ - samples/client/petstore/spring-http-interface-reactive
+ - samples/client/petstore/spring-http-interface
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
diff --git a/bin/configs/spring-http-interface-reactive.yaml b/bin/configs/spring-http-interface-reactive.yaml
new file mode 100644
index 000000000000..749d6fbf08d5
--- /dev/null
+++ b/bin/configs/spring-http-interface-reactive.yaml
@@ -0,0 +1,11 @@
+generatorName: spring
+library: spring-http-interface
+outputDir: samples/client/petstore/spring-http-interface-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:
+ artifactId: spring-http-interface-reactive
+ snapshotVersion: "true"
+ hideGenerationTimestamp: "true"
+ reactive: "true"
+
diff --git a/bin/configs/spring-http-interface.yaml b/bin/configs/spring-http-interface.yaml
new file mode 100644
index 000000000000..a5cf6c2d7cc9
--- /dev/null
+++ b/bin/configs/spring-http-interface.yaml
@@ -0,0 +1,10 @@
+generatorName: spring
+library: spring-http-interface
+outputDir: samples/client/petstore/spring-http-interface
+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:
+ artifactId: spring-http-interface
+ snapshotVersion: "true"
+ hideGenerationTimestamp: "true"
+ modelNameSuffix: 'Dto'
diff --git a/docs/generators/java-camel.md b/docs/generators/java-camel.md
index ae510a1033da..0acffa5698b8 100644
--- a/docs/generators/java-camel.md
+++ b/docs/generators/java-camel.md
@@ -64,7 +64,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|interfaceOnly|Whether to generate only API interface stubs without the server files.| |false|
|invokerPackage|root package for generated code| |org.openapitools.api|
|legacyDiscriminatorBehavior|Set to false for generators with better support for discriminators. (Python, Java, Go, PowerShell, C#have this enabled by default).|
**true** The mapping in the discriminator includes descendent schemas that allOf inherit from self and the discriminator mapping schemas in the OAS document. **false** The mapping in the discriminator includes any descendent schemas that allOf inherit from self, any oneOf schemas, any anyOf schemas, any x-discriminator-values, and the discriminator mapping schemas in the OAS document AND Codegen validates that oneOf and anyOf schemas contain the required discriminator and throws an error if the discriminator is missing. |true|
-|library|library template (sub-template)|**spring-boot** Spring-boot Server application. **spring-cloud** Spring-Cloud-Feign client with Spring-Boot auto-configured settings. |spring-boot|
+|library|library template (sub-template)|**spring-boot** Spring-boot Server application. **spring-cloud** Spring-Cloud-Feign client with Spring-Boot auto-configured settings. **spring-http-interface** Spring 6 HTTP interfaces (testing) |spring-boot|
|licenseName|The name of the license| |Unlicense|
|licenseUrl|The URL of the license| |http://unlicense.org|
|modelPackage|package for generated models| |org.openapitools.model|
diff --git a/docs/generators/spring.md b/docs/generators/spring.md
index ad6cba9fa6f0..e6fb75655840 100644
--- a/docs/generators/spring.md
+++ b/docs/generators/spring.md
@@ -57,7 +57,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|interfaceOnly|Whether to generate only API interface stubs without the server files.| |false|
|invokerPackage|root package for generated code| |org.openapitools.api|
|legacyDiscriminatorBehavior|Set to false for generators with better support for discriminators. (Python, Java, Go, PowerShell, C#have this enabled by default).|**true** The mapping in the discriminator includes descendent schemas that allOf inherit from self and the discriminator mapping schemas in the OAS document. **false** The mapping in the discriminator includes any descendent schemas that allOf inherit from self, any oneOf schemas, any anyOf schemas, any x-discriminator-values, and the discriminator mapping schemas in the OAS document AND Codegen validates that oneOf and anyOf schemas contain the required discriminator and throws an error if the discriminator is missing. |true|
-|library|library template (sub-template)|**spring-boot** Spring-boot Server application. **spring-cloud** Spring-Cloud-Feign client with Spring-Boot auto-configured settings. |spring-boot|
+|library|library template (sub-template)|**spring-boot** Spring-boot Server application. **spring-cloud** Spring-Cloud-Feign client with Spring-Boot auto-configured settings. **spring-http-interface** Spring 6 HTTP interfaces (testing) |spring-boot|
|licenseName|The name of the license| |Unlicense|
|licenseUrl|The URL of the license| |http://unlicense.org|
|modelPackage|package for generated models| |org.openapitools.model|
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 ae2c80a85603..9168bf8e3279 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
@@ -99,6 +99,7 @@ public class SpringCodegen extends AbstractJavaCodegen
public static final String USE_TAGS = "useTags";
public static final String SPRING_BOOT = "spring-boot";
public static final String SPRING_CLOUD_LIBRARY = "spring-cloud";
+ public static final String SPRING_HTTP_INTERFACE = "spring-http-interface";
public static final String API_FIRST = "apiFirst";
public static final String SPRING_CONTROLLER = "useSpringController";
public static final String HATEOAS = "hateoas";
@@ -247,6 +248,7 @@ public SpringCodegen() {
supportedLibraries.put(SPRING_BOOT, "Spring-boot Server application.");
supportedLibraries.put(SPRING_CLOUD_LIBRARY,
"Spring-Cloud-Feign client with Spring-Boot auto-configured settings.");
+ supportedLibraries.put(SPRING_HTTP_INTERFACE, "Spring 6 HTTP interfaces (testing)");
setLibrary(SPRING_BOOT);
final CliOption library = new CliOption(CodegenConstants.LIBRARY, CodegenConstants.LIBRARY_DESC)
.defaultValue(SPRING_BOOT);
@@ -272,7 +274,7 @@ public String getHelp() {
@Override
public DocumentationProvider defaultDocumentationProvider() {
- return DocumentationProvider.SPRINGDOC;
+ return SPRING_HTTP_INTERFACE.equals(library) ? DocumentationProvider.NONE : DocumentationProvider.SPRINGDOC;
}
public List supportedDocumentationProvider() {
@@ -343,6 +345,14 @@ public void processOpts() {
// Please refrain from updating values of Config Options after super.ProcessOpts() is called
super.processOpts();
+ if (SPRING_HTTP_INTERFACE.equals(library)) {
+ documentationProvider = DocumentationProvider.NONE;
+ annotationLibrary = AnnotationLibrary.NONE;
+ useJakartaEe=true;
+ additionalProperties.put(USE_JAKARTA_EE, useJakartaEe);
+ applyJakartaPackage();
+ }
+
if (DocumentationProvider.SPRINGFOX.equals(getDocumentationProvider())) {
LOGGER.warn("The springfox documentation provider is deprecated for removal. Use the springdoc provider instead.");
}
@@ -402,8 +412,8 @@ public void processOpts() {
}
if (additionalProperties.containsKey(REACTIVE)) {
- if (!SPRING_BOOT.equals(library)) {
- throw new IllegalArgumentException("Currently, reactive option is only supported with Spring-boot");
+ if (SPRING_CLOUD_LIBRARY.equals(library)) {
+ throw new IllegalArgumentException("Currently, reactive option doesn't supported by Spring Cloud");
}
this.setReactive(Boolean.parseBoolean(additionalProperties.get(REACTIVE).toString()));
}
@@ -537,7 +547,7 @@ public void processOpts() {
// @RequestMapping not supported with spring cloud openfeign.
setRequestMappingMode(RequestMappingMode.none);
additionalProperties.put(USE_FEIGN_CLIENT, "true");
- } else {
+ } else if (SPRING_BOOT.equals(library)) {
apiTemplateFiles.put("apiController.mustache", "Controller.java");
if (containsEnums()) {
supportingFiles.add(new SupportingFile("converter.mustache",
@@ -561,10 +571,14 @@ public void processOpts() {
"SpringFoxConfiguration.java"));
}
}
+ } else if (SPRING_HTTP_INTERFACE.equals(library)) {
+ supportingFiles.add(new SupportingFile("httpInterfacesConfiguration.mustache",
+ (sourceFolder + File.separator + configPackage).replace(".", java.io.File.separator), "HttpInterfacesAbstractConfigurator.java"));
+ writePropertyBack(USE_BEANVALIDATION, false);
}
}
- if (!SPRING_CLOUD_LIBRARY.equals(library)) {
+ if (SPRING_BOOT.equals(library)) {
supportingFiles.add(new SupportingFile("apiUtil.mustache",
(sourceFolder + File.separator + apiPackage).replace(".", java.io.File.separator), "ApiUtil.java"));
}
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/README.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/README.mustache
new file mode 100644
index 000000000000..6cc33662560b
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/README.mustache
@@ -0,0 +1,21 @@
+# OpenAPI generated API stub
+
+[Spring Framework 6 HTTP Interface](https://docs.spring.io/spring-framework/docs/6.0.0/reference/html/integration.html#rest-http-interface)
+
+
+## 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 application for HTTP integration with other REST services
+To use auto-generated interfaces you have to create your own configuration which extends default abstract configurator & provide `WebClient` instance via constructor
+```java
+@Configuration
+public class MyConfiguration extends {{configPackage}}.HttpInterfacesAbstractConfigurator {
+
+ public MyConfiguration(WebClient myWebClient) { // separately created WebClient instance
+ super(myWebClient);
+ }
+}
+```
\ No newline at end of file
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/api.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/api.mustache
new file mode 100644
index 000000000000..fecd5259ec16
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/api.mustache
@@ -0,0 +1,67 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) ({{{generatorVersion}}}).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package {{package}};
+
+{{#imports}}import {{import}};
+{{/imports}}
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.service.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+{{#reactive}}
+
+import org.springframework.http.codec.multipart.Part;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+{{/reactive}}
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import {{javaxPackage}}.annotation.Generated;
+
+
+{{>generatedAnnotation}}
+{{#operations}}
+public interface {{classname}} {
+{{#operation}}
+
+ /**
+ * {{httpMethod}} {{{path}}}{{#summary}} : {{.}}{{/summary}}
+ {{#notes}}
+ * {{.}}
+ {{/notes}}
+ *
+ {{#allParams}}
+ * @param {{paramName}} {{description}}{{#required}} (required){{/required}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}}
+ {{/allParams}}
+ * @return {{#responses}}{{message}} (status code {{code}}){{^-last}}
+ * or {{/-last}}{{/responses}}
+ {{#isDeprecated}}
+ * @deprecated
+ {{/isDeprecated}}
+ {{#externalDocs}}
+ * {{description}}
+ * @see {{summary}} Documentation
+ {{/externalDocs}}
+ */
+ {{#isDeprecated}}
+ @Deprecated
+ {{/isDeprecated}}
+ @HttpExchange(
+ method = "{{{httpMethod}}}",
+ value = "{{{path}}}"{{#vendorExtensions.x-accepts}},
+ accept = "{{{vendorExtensions.x-accepts}}}"{{/vendorExtensions.x-accepts}}{{#vendorExtensions.x-content-type}},
+ contentType = "{{{vendorExtensions.x-content-type}}}"{{/vendorExtensions.x-content-type}}
+ )
+ {{#responseWrapper}}{{.}}<{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {{operationId}}(
+ {{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{>cookieParams}}{{^-last}},
+ {{/-last}}{{/allParams}}
+ ){{#unhandledException}} throws Exception{{/unhandledException}};
+
+{{/operation}}
+}
+{{/operations}}
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/httpInterfacesConfiguration.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/httpInterfacesConfiguration.mustache
new file mode 100644
index 000000000000..6e92c83f51c8
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/httpInterfacesConfiguration.mustache
@@ -0,0 +1,38 @@
+/**
+* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) ({{{generatorVersion}}}).
+* https://openapi-generator.tech
+* Do not edit the class manually.
+*/
+package {{configPackage}};
+
+{{#apiInfo}}
+ {{#apis}}
+import {{apiPackage}}.{{classname}};
+ {{/apis}}
+{{/apiInfo}}
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.reactive.function.client.WebClient;
+import org.springframework.web.reactive.function.client.support.WebClientAdapter;
+import org.springframework.web.service.invoker.HttpServiceProxyFactory;
+
+public abstract class HttpInterfacesAbstractConfigurator {
+
+ private final WebClient webClient;
+
+ public HttpInterfacesAbstractConfigurator(final WebClient webClient) {
+ this.webClient = webClient;
+ }
+
+{{#apiInfo}}
+{{#apis}}
+ @Bean(name = "{{configPackage}}.HttpInterfacesAbstractConfigurator.{{classVarName}}")
+ {{classname}} {{classVarName}}HttpProxy() {
+ HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).build();
+ return factory.createClient({{classname}}.class);
+ }
+
+{{/apis}}
+{{/apiInfo}}
+
+}
diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/pom.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/pom.mustache
new file mode 100644
index 000000000000..b44dd3d3fcad
--- /dev/null
+++ b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-http-interface/pom.mustache
@@ -0,0 +1,98 @@
+
+ 4.0.0
+ {{groupId}}
+ {{artifactId}}
+ jar
+ {{artifactId}}
+ {{artifactVersion}}
+
+ 17
+ UTF-8
+
+{{#parentOverridden}}
+
+ {{{parentGroupId}}}
+ {{{parentArtifactId}}}
+ {{{parentVersion}}}
+
+{{/parentOverridden}}
+{{^parentOverridden}}
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.0.1
+
+
+{{/parentOverridden}}
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ ${java.version}
+ ${java.version}
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.2.1
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
+
+
+ com.google.code.findbugs
+ jsr305
+ 3.0.2
+
+
+ jakarta.validation
+ jakarta.validation-api
+
+ {{#withXml}}
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-xml
+
+ {{/withXml}}
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
+ {{#openApiNullable}}
+
+ org.openapitools
+ jackson-databind-nullable
+ 0.2.2
+
+ {{/openApiNullable}}
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
diff --git a/samples/client/petstore/spring-http-interface-reactive/.openapi-generator-ignore b/samples/client/petstore/spring-http-interface-reactive/.openapi-generator-ignore
new file mode 100644
index 000000000000..7484ee590a38
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-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/client/petstore/spring-http-interface-reactive/.openapi-generator/FILES b/samples/client/petstore/spring-http-interface-reactive/.openapi-generator/FILES
new file mode 100644
index 000000000000..1249969fa6d0
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/.openapi-generator/FILES
@@ -0,0 +1,57 @@
+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/configuration/HttpInterfacesAbstractConfigurator.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/File.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/ModelList.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/client/petstore/spring-http-interface-reactive/.openapi-generator/VERSION b/samples/client/petstore/spring-http-interface-reactive/.openapi-generator/VERSION
new file mode 100644
index 000000000000..d6b4ec4aa783
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/.openapi-generator/VERSION
@@ -0,0 +1 @@
+6.3.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/spring-http-interface-reactive/README.md b/samples/client/petstore/spring-http-interface-reactive/README.md
new file mode 100644
index 000000000000..d947e03a2484
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/README.md
@@ -0,0 +1,21 @@
+# OpenAPI generated API stub
+
+[Spring Framework 6 HTTP Interface](https://docs.spring.io/spring-framework/docs/6.0.0/reference/html/integration.html#rest-http-interface)
+
+
+## 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 application for HTTP integration with other REST services
+To use auto-generated interfaces you have to create your own configuration which extends default abstract configurator & provide `WebClient` instance via constructor
+```java
+@Configuration
+public class MyConfiguration extends org.openapitools.configuration.HttpInterfacesAbstractConfigurator {
+
+ public MyConfiguration(WebClient myWebClient) { // separately created WebClient instance
+ super(myWebClient);
+ }
+}
+```
\ No newline at end of file
diff --git a/samples/client/petstore/spring-http-interface-reactive/pom.xml b/samples/client/petstore/spring-http-interface-reactive/pom.xml
new file mode 100644
index 000000000000..116d33b19e89
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/pom.xml
@@ -0,0 +1,76 @@
+
+ 4.0.0
+ org.openapitools
+ spring-http-interface-reactive
+ jar
+ spring-http-interface-reactive
+ 1.0.0-SNAPSHOT
+
+ 17
+ UTF-8
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.0.1
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ ${java.version}
+ ${java.version}
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.2.1
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
+
+
+ com.google.code.findbugs
+ jsr305
+ 3.0.2
+
+
+ jakarta.validation
+ jakarta.validation-api
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
+
+ org.openapitools
+ jackson-databind-nullable
+ 0.2.2
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
diff --git a/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java
new file mode 100644
index 000000000000..5608480c5c81
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -0,0 +1,44 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (6.3.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.service.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import org.springframework.http.codec.multipart.Part;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import jakarta.annotation.Generated;
+
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+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)
+ */
+ @HttpExchange(
+ method = "PATCH",
+ value = "/another-fake/dummy",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ Mono> call123testSpecialTags(
+ @RequestBody Mono body
+ );
+
+}
diff --git a/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/FakeApi.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/FakeApi.java
new file mode 100644
index 000000000000..d7e11c29867e
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/FakeApi.java
@@ -0,0 +1,346 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (6.3.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.springframework.format.annotation.DateTimeFormat;
+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 org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.service.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import org.springframework.http.codec.multipart.Part;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import jakarta.annotation.Generated;
+
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/create_xml_item",
+ accept = "application/json",
+ contentType = "application/xml"
+ )
+ Mono> createXmlItem(
+ @RequestBody Mono 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/outer/boolean",
+ accept = "*/*",
+ contentType = "*/*"
+ )
+ Mono> fakeOuterBooleanSerialize(
+ @RequestBody(required = false) Mono 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/outer/composite",
+ accept = "*/*",
+ contentType = "*/*"
+ )
+ Mono> fakeOuterCompositeSerialize(
+ @RequestBody(required = false) Mono 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/outer/number",
+ accept = "*/*",
+ contentType = "*/*"
+ )
+ Mono> fakeOuterNumberSerialize(
+ @RequestBody(required = false) Mono 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/outer/string",
+ accept = "*/*",
+ contentType = "*/*"
+ )
+ Mono> fakeOuterStringSerialize(
+ @RequestBody(required = false) Mono body
+ );
+
+
+ /**
+ * PUT /fake/body-with-file-schema
+ * For this test, the body for this request much reference a schema named `File`.
+ *
+ * @param body (required)
+ * @return Success (status code 200)
+ */
+ @HttpExchange(
+ method = "PUT",
+ value = "/fake/body-with-file-schema",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ Mono> testBodyWithFileSchema(
+ @RequestBody Mono body
+ );
+
+
+ /**
+ * PUT /fake/body-with-query-params
+ *
+ * @param query (required)
+ * @param body (required)
+ * @return Success (status code 200)
+ */
+ @HttpExchange(
+ method = "PUT",
+ value = "/fake/body-with-query-params",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ Mono> testBodyWithQueryParams(
+ @RequestParam(value = "query", required = true) String query,
+ @RequestBody Mono body
+ );
+
+
+ /**
+ * PATCH /fake : To test \"client\" model
+ * To test \"client\" model
+ *
+ * @param body client model (required)
+ * @return successful operation (status code 200)
+ */
+ @HttpExchange(
+ method = "PATCH",
+ value = "/fake",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ Mono> testClientModel(
+ @RequestBody Mono 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake",
+ accept = "application/json",
+ contentType = "application/x-www-form-urlencoded"
+ )
+ Mono> testEndpointParameters(
+ @RequestParam(value = "number", required = true) BigDecimal number,
+ @RequestParam(value = "double", required = true) Double _double,
+ @RequestParam(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+ @RequestParam(value = "byte", required = true) byte[] _byte,
+ @RequestParam(value = "integer", required = false) Integer integer,
+ @RequestParam(value = "int32", required = false) Integer int32,
+ @RequestParam(value = "int64", required = false) Long int64,
+ @RequestParam(value = "float", required = false) Float _float,
+ @RequestParam(value = "string", required = false) String string,
+ @RequestPart(value = "binary", required = false) Flux binary,
+ @RequestParam(value = "date", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date,
+ @RequestParam(value = "dateTime", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+ @RequestParam(value = "password", required = false) String password,
+ @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)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/fake",
+ accept = "application/json",
+ contentType = "application/x-www-form-urlencoded"
+ )
+ Mono> testEnumParameters(
+ @RequestHeader(value = "enum_header_string_array", required = false) List enumHeaderStringArray,
+ @RequestHeader(value = "enum_header_string", required = false, defaultValue = "-efg") String enumHeaderString,
+ @RequestParam(value = "enum_query_string_array", required = false) List enumQueryStringArray,
+ @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+ @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+ @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+ @RequestPart(value = "enum_form_string_array", required = false) List enumFormStringArray,
+ @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 Something wrong (status code 400)
+ */
+ @HttpExchange(
+ method = "DELETE",
+ value = "/fake",
+ accept = "application/json"
+ )
+ Mono> testGroupParameters(
+ @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+ @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+ @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+ @RequestParam(value = "string_group", required = false) Integer stringGroup,
+ @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+ @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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/inline-additionalProperties",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ Mono> testInlineAdditionalProperties(
+ @RequestBody Mono> param
+ );
+
+
+ /**
+ * GET /fake/jsonFormData : test json serialization of form data
+ *
+ * @param param field1 (required)
+ * @param param2 field2 (required)
+ * @return successful operation (status code 200)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/fake/jsonFormData",
+ accept = "application/json",
+ contentType = "application/x-www-form-urlencoded"
+ )
+ Mono> testJsonFormData(
+ @RequestParam(value = "param", required = true) String param,
+ @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)
+ */
+ @HttpExchange(
+ method = "PUT",
+ value = "/fake/test-query-parameters",
+ accept = "application/json"
+ )
+ Mono> testQueryParameterCollectionFormat(
+ @RequestParam(value = "pipe", required = true) List pipe,
+ @RequestParam(value = "ioutil", required = true) List ioutil,
+ @RequestParam(value = "http", required = true) List http,
+ @RequestParam(value = "url", required = true) List url,
+ @RequestParam(value = "context", required = true) List context
+ );
+
+}
diff --git a/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/FakeClassnameTags123Api.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/FakeClassnameTags123Api.java
new file mode 100644
index 000000000000..080de715e3a1
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/FakeClassnameTags123Api.java
@@ -0,0 +1,44 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (6.3.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.Client;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.service.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import org.springframework.http.codec.multipart.Part;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import jakarta.annotation.Generated;
+
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+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)
+ */
+ @HttpExchange(
+ method = "PATCH",
+ value = "/fake_classname_test",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ Mono> testClassname(
+ @RequestBody Mono body
+ );
+
+}
diff --git a/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/PetApi.java
new file mode 100644
index 000000000000..96ae0e815503
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/PetApi.java
@@ -0,0 +1,205 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (6.3.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 org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.service.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import org.springframework.http.codec.multipart.Part;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import jakarta.annotation.Generated;
+
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/pet",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ Mono> addPet(
+ @RequestBody Mono 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)
+ */
+ @HttpExchange(
+ method = "DELETE",
+ value = "/pet/{petId}",
+ accept = "application/json"
+ )
+ Mono> deletePet(
+ @PathVariable("petId") Long petId,
+ @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)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/pet/findByStatus",
+ accept = "application/json"
+ )
+ Mono>> findPetsByStatus(
+ @RequestParam(value = "status", required = true) List 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
+ */
+ @Deprecated
+ @HttpExchange(
+ method = "GET",
+ value = "/pet/findByTags",
+ accept = "application/json"
+ )
+ Mono>> findPetsByTags(
+ @RequestParam(value = "tags", required = true) Set 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)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/pet/{petId}",
+ accept = "application/json"
+ )
+ Mono> getPetById(
+ @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)
+ */
+ @HttpExchange(
+ method = "PUT",
+ value = "/pet",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ Mono> updatePet(
+ @RequestBody Mono 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/pet/{petId}",
+ accept = "application/json",
+ contentType = "application/x-www-form-urlencoded"
+ )
+ Mono> updatePetWithForm(
+ @PathVariable("petId") Long petId,
+ @RequestParam(value = "name", required = false) String name,
+ @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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/pet/{petId}/uploadImage",
+ accept = "application/json",
+ contentType = "multipart/form-data"
+ )
+ Mono> uploadFile(
+ @PathVariable("petId") Long petId,
+ @RequestParam(value = "additionalMetadata", required = false) String additionalMetadata,
+ @RequestPart(value = "file", required = false) Flux 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/{petId}/uploadImageWithRequiredFile",
+ accept = "application/json",
+ contentType = "multipart/form-data"
+ )
+ Mono> uploadFileWithRequiredFile(
+ @PathVariable("petId") Long petId,
+ @RequestPart(value = "requiredFile", required = true) Flux requiredFile,
+ @RequestParam(value = "additionalMetadata", required = false) String additionalMetadata
+ );
+
+}
diff --git a/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/StoreApi.java
new file mode 100644
index 000000000000..9b3706c877ab
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/StoreApi.java
@@ -0,0 +1,98 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (6.3.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 org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.service.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import org.springframework.http.codec.multipart.Part;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import jakarta.annotation.Generated;
+
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public interface StoreApi {
+
+ /**
+ * DELETE /store/order/{order_id} : Delete purchase order by ID
+ * For valid response try integer IDs with value < 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)
+ */
+ @HttpExchange(
+ method = "DELETE",
+ value = "/store/order/{order_id}",
+ accept = "application/json"
+ )
+ Mono> deleteOrder(
+ @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)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/store/inventory",
+ accept = "application/json"
+ )
+ Mono>> getInventory(
+
+ );
+
+
+ /**
+ * GET /store/order/{order_id} : Find purchase order by ID
+ * For valid response try integer IDs with value <= 5 or > 10. Other values will generate 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)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/store/order/{order_id}",
+ accept = "application/json"
+ )
+ Mono> getOrderById(
+ @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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/store/order",
+ accept = "application/json",
+ contentType = "*/*"
+ )
+ Mono> placeOrder(
+ @RequestBody Mono body
+ );
+
+}
diff --git a/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/UserApi.java
new file mode 100644
index 000000000000..b62edb59a72f
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/UserApi.java
@@ -0,0 +1,171 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (6.3.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 org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.service.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import org.springframework.http.codec.multipart.Part;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import jakarta.annotation.Generated;
+
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/user",
+ accept = "application/json",
+ contentType = "*/*"
+ )
+ Mono> createUser(
+ @RequestBody Mono 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/user/createWithArray",
+ accept = "application/json",
+ contentType = "*/*"
+ )
+ Mono> createUsersWithArrayInput(
+ @RequestBody Flux 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/user/createWithList",
+ accept = "application/json",
+ contentType = "*/*"
+ )
+ Mono> createUsersWithListInput(
+ @RequestBody Flux 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)
+ */
+ @HttpExchange(
+ method = "DELETE",
+ value = "/user/{username}",
+ accept = "application/json"
+ )
+ Mono> deleteUser(
+ @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)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/user/{username}",
+ accept = "application/json"
+ )
+ Mono> getUserByName(
+ @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)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/user/login",
+ accept = "application/json"
+ )
+ Mono> loginUser(
+ @RequestParam(value = "username", required = true) String username,
+ @RequestParam(value = "password", required = true) String password
+ );
+
+
+ /**
+ * GET /user/logout : Logs out current logged in user session
+ *
+ * @return successful operation (status code 200)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/user/logout",
+ accept = "application/json"
+ )
+ Mono> 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)
+ */
+ @HttpExchange(
+ method = "PUT",
+ value = "/user/{username}",
+ accept = "application/json",
+ contentType = "*/*"
+ )
+ Mono> updateUser(
+ @PathVariable("username") String username,
+ @RequestBody Mono body
+ );
+
+}
diff --git a/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/configuration/HttpInterfacesAbstractConfigurator.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/configuration/HttpInterfacesAbstractConfigurator.java
new file mode 100644
index 000000000000..8475081a17c1
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/configuration/HttpInterfacesAbstractConfigurator.java
@@ -0,0 +1,65 @@
+/**
+* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (6.3.0-SNAPSHOT).
+* https://openapi-generator.tech
+* Do not edit the class manually.
+*/
+package org.openapitools.configuration;
+
+import org.openapitools.api.AnotherFakeApi;
+import org.openapitools.api.FakeApi;
+import org.openapitools.api.FakeClassnameTags123Api;
+import org.openapitools.api.PetApi;
+import org.openapitools.api.StoreApi;
+import org.openapitools.api.UserApi;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.reactive.function.client.WebClient;
+import org.springframework.web.reactive.function.client.support.WebClientAdapter;
+import org.springframework.web.service.invoker.HttpServiceProxyFactory;
+
+public abstract class HttpInterfacesAbstractConfigurator {
+
+ private final WebClient webClient;
+
+ public HttpInterfacesAbstractConfigurator(final WebClient webClient) {
+ this.webClient = webClient;
+ }
+
+ @Bean(name = "org.openapitools.configuration.HttpInterfacesAbstractConfigurator.anotherFake")
+ AnotherFakeApi anotherFakeHttpProxy() {
+ HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).build();
+ return factory.createClient(AnotherFakeApi.class);
+ }
+
+ @Bean(name = "org.openapitools.configuration.HttpInterfacesAbstractConfigurator.fake")
+ FakeApi fakeHttpProxy() {
+ HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).build();
+ return factory.createClient(FakeApi.class);
+ }
+
+ @Bean(name = "org.openapitools.configuration.HttpInterfacesAbstractConfigurator.fakeClassnameTags123")
+ FakeClassnameTags123Api fakeClassnameTags123HttpProxy() {
+ HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).build();
+ return factory.createClient(FakeClassnameTags123Api.class);
+ }
+
+ @Bean(name = "org.openapitools.configuration.HttpInterfacesAbstractConfigurator.pet")
+ PetApi petHttpProxy() {
+ HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).build();
+ return factory.createClient(PetApi.class);
+ }
+
+ @Bean(name = "org.openapitools.configuration.HttpInterfacesAbstractConfigurator.store")
+ StoreApi storeHttpProxy() {
+ HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).build();
+ return factory.createClient(StoreApi.class);
+ }
+
+ @Bean(name = "org.openapitools.configuration.HttpInterfacesAbstractConfigurator.user")
+ UserApi userHttpProxy() {
+ HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient)).build();
+ return factory.createClient(UserApi.class);
+ }
+
+
+}
diff --git a/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesAnyType.java
new file mode 100644
index 000000000000..83b1c4518de5
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/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 org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * AdditionalPropertiesAnyType
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesAnyType extends HashMap {
+
+ @JsonProperty("name")
+ private String name;
+
+ public AdditionalPropertiesAnyType name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Get name
+ * @return name
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesArray.java
new file mode 100644
index 000000000000..e26bc0925506
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/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 org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * AdditionalPropertiesArray
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesArray extends HashMap {
+
+ @JsonProperty("name")
+ private String name;
+
+ public AdditionalPropertiesArray name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Get name
+ * @return name
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesBoolean.java
new file mode 100644
index 000000000000..5f3960d561d5
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/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 org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * AdditionalPropertiesBoolean
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesBoolean extends HashMap {
+
+ @JsonProperty("name")
+ private String name;
+
+ public AdditionalPropertiesBoolean name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Get name
+ * @return name
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
new file mode 100644
index 000000000000..169b7406f56e
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesClass.java
@@ -0,0 +1,386 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * AdditionalPropertiesClass
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesClass {
+
+ @JsonProperty("map_string")
+
+ private Map mapString = null;
+
+ @JsonProperty("map_number")
+
+ private Map mapNumber = null;
+
+ @JsonProperty("map_integer")
+
+ private Map mapInteger = null;
+
+ @JsonProperty("map_boolean")
+
+ private Map mapBoolean = null;
+
+ @JsonProperty("map_array_integer")
+
+ private Map> mapArrayInteger = null;
+
+ @JsonProperty("map_array_anytype")
+
+ private Map> mapArrayAnytype = null;
+
+ @JsonProperty("map_map_string")
+
+ private Map> mapMapString = null;
+
+ @JsonProperty("map_map_anytype")
+
+ private Map> mapMapAnytype = null;
+
+ @JsonProperty("anytype_1")
+ private Object anytype1;
+
+ @JsonProperty("anytype_2")
+ private Object anytype2;
+
+ @JsonProperty("anytype_3")
+ private Object anytype3;
+
+ public AdditionalPropertiesClass mapString(Map 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
+ */
+
+ public Map getMapString() {
+ return mapString;
+ }
+
+ public void setMapString(Map mapString) {
+ this.mapString = mapString;
+ }
+
+ public AdditionalPropertiesClass mapNumber(Map 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
+ */
+
+ public Map getMapNumber() {
+ return mapNumber;
+ }
+
+ public void setMapNumber(Map mapNumber) {
+ this.mapNumber = mapNumber;
+ }
+
+ public AdditionalPropertiesClass mapInteger(Map 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
+ */
+
+ public Map getMapInteger() {
+ return mapInteger;
+ }
+
+ public void setMapInteger(Map mapInteger) {
+ this.mapInteger = mapInteger;
+ }
+
+ public AdditionalPropertiesClass mapBoolean(Map 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
+ */
+
+ public Map getMapBoolean() {
+ return mapBoolean;
+ }
+
+ public void setMapBoolean(Map mapBoolean) {
+ this.mapBoolean = mapBoolean;
+ }
+
+ public AdditionalPropertiesClass mapArrayInteger(Map> mapArrayInteger) {
+ this.mapArrayInteger = mapArrayInteger;
+ return this;
+ }
+
+ public AdditionalPropertiesClass putMapArrayIntegerItem(String key, List mapArrayIntegerItem) {
+ if (this.mapArrayInteger == null) {
+ this.mapArrayInteger = new HashMap<>();
+ }
+ this.mapArrayInteger.put(key, mapArrayIntegerItem);
+ return this;
+ }
+
+ /**
+ * Get mapArrayInteger
+ * @return mapArrayInteger
+ */
+
+ public Map> getMapArrayInteger() {
+ return mapArrayInteger;
+ }
+
+ public void setMapArrayInteger(Map> mapArrayInteger) {
+ this.mapArrayInteger = mapArrayInteger;
+ }
+
+ public AdditionalPropertiesClass mapArrayAnytype(Map> mapArrayAnytype) {
+ this.mapArrayAnytype = mapArrayAnytype;
+ return this;
+ }
+
+ public AdditionalPropertiesClass putMapArrayAnytypeItem(String key, List mapArrayAnytypeItem) {
+ if (this.mapArrayAnytype == null) {
+ this.mapArrayAnytype = new HashMap<>();
+ }
+ this.mapArrayAnytype.put(key, mapArrayAnytypeItem);
+ return this;
+ }
+
+ /**
+ * Get mapArrayAnytype
+ * @return mapArrayAnytype
+ */
+
+ public Map> getMapArrayAnytype() {
+ return mapArrayAnytype;
+ }
+
+ public void setMapArrayAnytype(Map> mapArrayAnytype) {
+ this.mapArrayAnytype = mapArrayAnytype;
+ }
+
+ public AdditionalPropertiesClass mapMapString(Map> mapMapString) {
+ this.mapMapString = mapMapString;
+ return this;
+ }
+
+ public AdditionalPropertiesClass putMapMapStringItem(String key, Map mapMapStringItem) {
+ if (this.mapMapString == null) {
+ this.mapMapString = new HashMap<>();
+ }
+ this.mapMapString.put(key, mapMapStringItem);
+ return this;
+ }
+
+ /**
+ * Get mapMapString
+ * @return mapMapString
+ */
+
+ public Map> getMapMapString() {
+ return mapMapString;
+ }
+
+ public void setMapMapString(Map> mapMapString) {
+ this.mapMapString = mapMapString;
+ }
+
+ public AdditionalPropertiesClass mapMapAnytype(Map> mapMapAnytype) {
+ this.mapMapAnytype = mapMapAnytype;
+ return this;
+ }
+
+ public AdditionalPropertiesClass putMapMapAnytypeItem(String key, Map mapMapAnytypeItem) {
+ if (this.mapMapAnytype == null) {
+ this.mapMapAnytype = new HashMap<>();
+ }
+ this.mapMapAnytype.put(key, mapMapAnytypeItem);
+ return this;
+ }
+
+ /**
+ * Get mapMapAnytype
+ * @return mapMapAnytype
+ */
+
+ public Map> getMapMapAnytype() {
+ return mapMapAnytype;
+ }
+
+ public void setMapMapAnytype(Map> mapMapAnytype) {
+ this.mapMapAnytype = mapMapAnytype;
+ }
+
+ public AdditionalPropertiesClass anytype1(Object anytype1) {
+ this.anytype1 = anytype1;
+ return this;
+ }
+
+ /**
+ * Get anytype1
+ * @return anytype1
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesInteger.java
new file mode 100644
index 000000000000..6c0650b76c58
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/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 org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * AdditionalPropertiesInteger
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesInteger extends HashMap {
+
+ @JsonProperty("name")
+ private String name;
+
+ public AdditionalPropertiesInteger name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Get name
+ * @return name
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesNumber.java
new file mode 100644
index 000000000000..2ad29c75e7d0
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/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 org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * AdditionalPropertiesNumber
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesNumber extends HashMap {
+
+ @JsonProperty("name")
+ private String name;
+
+ public AdditionalPropertiesNumber name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Get name
+ * @return name
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesObject.java
new file mode 100644
index 000000000000..af2d1826f1c1
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/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 org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * AdditionalPropertiesObject
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesObject extends HashMap {
+
+ @JsonProperty("name")
+ private String name;
+
+ public AdditionalPropertiesObject name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Get name
+ * @return name
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesString.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/AdditionalPropertiesString.java
new file mode 100644
index 000000000000..1cb12bed9160
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/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 org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * AdditionalPropertiesString
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class AdditionalPropertiesString extends HashMap {
+
+ @JsonProperty("name")
+ private String name;
+
+ public AdditionalPropertiesString name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Get name
+ * @return name
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Animal.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Animal.java
new file mode 100644
index 000000000000..dfa4f2b2b129
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Animal.java
@@ -0,0 +1,120 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+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.model.BigCat;
+import org.openapitools.model.Cat;
+import org.openapitools.model.Dog;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Animal
+ */
+
+@JsonIgnoreProperties(
+ value = "className", // ignore manually set className, it will be automatically generated by Jackson during serialization
+ allowSetters = true // allows the className to be set during deserialization
+)
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.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")
+})
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+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
+ */
+ @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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
new file mode 100644
index 000000000000..b37936c21348
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java
@@ -0,0 +1,92 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * ArrayOfArrayOfNumberOnly
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfArrayOfNumberOnly {
+
+ @JsonProperty("ArrayArrayNumber")
+
+ private List> arrayArrayNumber = null;
+
+ public ArrayOfArrayOfNumberOnly arrayArrayNumber(List> arrayArrayNumber) {
+ this.arrayArrayNumber = arrayArrayNumber;
+ return this;
+ }
+
+ public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List arrayArrayNumberItem) {
+ if (this.arrayArrayNumber == null) {
+ this.arrayArrayNumber = new ArrayList<>();
+ }
+ this.arrayArrayNumber.add(arrayArrayNumberItem);
+ return this;
+ }
+
+ /**
+ * Get arrayArrayNumber
+ * @return arrayArrayNumber
+ */
+
+ public List> getArrayArrayNumber() {
+ return arrayArrayNumber;
+ }
+
+ public void setArrayArrayNumber(List> 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
new file mode 100644
index 000000000000..eb820544e7dc
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ArrayOfNumberOnly.java
@@ -0,0 +1,92 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * ArrayOfNumberOnly
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayOfNumberOnly {
+
+ @JsonProperty("ArrayNumber")
+
+ private List arrayNumber = null;
+
+ public ArrayOfNumberOnly arrayNumber(List 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
+ */
+
+ public List getArrayNumber() {
+ return arrayNumber;
+ }
+
+ public void setArrayNumber(List 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ArrayTest.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ArrayTest.java
new file mode 100644
index 000000000000..8caa5447995a
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ArrayTest.java
@@ -0,0 +1,156 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * ArrayTest
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ArrayTest {
+
+ @JsonProperty("array_of_string")
+
+ private List arrayOfString = null;
+
+ @JsonProperty("array_array_of_integer")
+
+ private List> arrayArrayOfInteger = null;
+
+ @JsonProperty("array_array_of_model")
+
+ private List> arrayArrayOfModel = null;
+
+ public ArrayTest arrayOfString(List 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
+ */
+
+ public List getArrayOfString() {
+ return arrayOfString;
+ }
+
+ public void setArrayOfString(List arrayOfString) {
+ this.arrayOfString = arrayOfString;
+ }
+
+ public ArrayTest arrayArrayOfInteger(List> arrayArrayOfInteger) {
+ this.arrayArrayOfInteger = arrayArrayOfInteger;
+ return this;
+ }
+
+ public ArrayTest addArrayArrayOfIntegerItem(List arrayArrayOfIntegerItem) {
+ if (this.arrayArrayOfInteger == null) {
+ this.arrayArrayOfInteger = new ArrayList<>();
+ }
+ this.arrayArrayOfInteger.add(arrayArrayOfIntegerItem);
+ return this;
+ }
+
+ /**
+ * Get arrayArrayOfInteger
+ * @return arrayArrayOfInteger
+ */
+
+ public List> getArrayArrayOfInteger() {
+ return arrayArrayOfInteger;
+ }
+
+ public void setArrayArrayOfInteger(List> arrayArrayOfInteger) {
+ this.arrayArrayOfInteger = arrayArrayOfInteger;
+ }
+
+ public ArrayTest arrayArrayOfModel(List> arrayArrayOfModel) {
+ this.arrayArrayOfModel = arrayArrayOfModel;
+ return this;
+ }
+
+ public ArrayTest addArrayArrayOfModelItem(List arrayArrayOfModelItem) {
+ if (this.arrayArrayOfModel == null) {
+ this.arrayArrayOfModel = new ArrayList<>();
+ }
+ this.arrayArrayOfModel.add(arrayArrayOfModelItem);
+ return this;
+ }
+
+ /**
+ * Get arrayArrayOfModel
+ * @return arrayArrayOfModel
+ */
+
+ public List> getArrayArrayOfModel() {
+ return arrayArrayOfModel;
+ }
+
+ public void setArrayArrayOfModel(List> 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/BigCat.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/BigCat.java
new file mode 100644
index 000000000000..b89e1d790199
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/BigCat.java
@@ -0,0 +1,142 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+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 com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.Cat;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * BigCat
+ */
+
+
+@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
+ */
+
+ public KindEnum getKind() {
+ return kind;
+ }
+
+ public void setKind(KindEnum kind) {
+ this.kind = kind;
+ }
+
+ public BigCat declawed(Boolean declawed) {
+ super.setDeclawed(declawed);
+ return this;
+ }
+
+ public BigCat className(String className) {
+ super.setClassName(className);
+ return this;
+ }
+
+ public BigCat color(String color) {
+ super.setColor(color);
+ return this;
+ }
+
+ @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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/BigCatAllOf.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/BigCatAllOf.java
new file mode 100644
index 000000000000..37e401dfd52c
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/BigCatAllOf.java
@@ -0,0 +1,122 @@
+package 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.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * BigCatAllOf
+ */
+
+@JsonTypeName("BigCat_allOf")
+@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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Capitalization.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Capitalization.java
new file mode 100644
index 000000000000..2e4f6745fa5e
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Capitalization.java
@@ -0,0 +1,195 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Capitalization
+ */
+
+@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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Cat.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Cat.java
new file mode 100644
index 000000000000..49ff8de95db3
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Cat.java
@@ -0,0 +1,106 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+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.model.Animal;
+import org.openapitools.model.BigCat;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Cat
+ */
+
+@JsonIgnoreProperties(
+ value = "className", // ignore manually set className, it will be automatically generated by Jackson during serialization
+ allowSetters = true // allows the className to be set during deserialization
+)
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className", visible = true)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = BigCat.class, name = "BigCat")
+})
+
+@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
+ */
+
+ public Boolean getDeclawed() {
+ return declawed;
+ }
+
+ public void setDeclawed(Boolean declawed) {
+ this.declawed = declawed;
+ }
+
+ public Cat className(String className) {
+ super.setClassName(className);
+ return this;
+ }
+
+ public Cat color(String color) {
+ super.setColor(color);
+ return this;
+ }
+
+ @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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/CatAllOf.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/CatAllOf.java
new file mode 100644
index 000000000000..c95d2391d819
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/CatAllOf.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 com.fasterxml.jackson.annotation.JsonTypeName;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * CatAllOf
+ */
+
+@JsonTypeName("Cat_allOf")
+@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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Category.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Category.java
new file mode 100644
index 000000000000..fb6e71cd900f
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Category.java
@@ -0,0 +1,103 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Category
+ */
+
+@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
+ */
+
+ 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
+ */
+ @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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ClassModel.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ClassModel.java
new file mode 100644
index 000000000000..b943a1fb7066
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ClassModel.java
@@ -0,0 +1,80 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Model for testing model with \"_class\" property
+ */
+
+@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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Client.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Client.java
new file mode 100644
index 000000000000..b4d2844d1a7c
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Client.java
@@ -0,0 +1,80 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Client
+ */
+
+@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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Dog.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Dog.java
new file mode 100644
index 000000000000..d3bf137ed76e
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Dog.java
@@ -0,0 +1,97 @@
+package org.openapitools.model;
+
+import java.net.URI;
+import java.util.Objects;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+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.model.Animal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Dog
+ */
+
+
+@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
+ */
+
+ public String getBreed() {
+ return breed;
+ }
+
+ public void setBreed(String breed) {
+ this.breed = breed;
+ }
+
+ public Dog className(String className) {
+ super.setClassName(className);
+ return this;
+ }
+
+ public Dog color(String color) {
+ super.setColor(color);
+ return this;
+ }
+
+ @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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/DogAllOf.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/DogAllOf.java
new file mode 100644
index 000000000000..99edfab4008f
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/DogAllOf.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 com.fasterxml.jackson.annotation.JsonTypeName;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * DogAllOf
+ */
+
+@JsonTypeName("Dog_allOf")
+@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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/EnumArrays.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/EnumArrays.java
new file mode 100644
index 000000000000..8440fe771222
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/EnumArrays.java
@@ -0,0 +1,185 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * EnumArrays
+ */
+
+@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")
+
+ private List arrayEnum = null;
+
+ public EnumArrays justSymbol(JustSymbolEnum justSymbol) {
+ this.justSymbol = justSymbol;
+ return this;
+ }
+
+ /**
+ * Get justSymbol
+ * @return justSymbol
+ */
+
+ public JustSymbolEnum getJustSymbol() {
+ return justSymbol;
+ }
+
+ public void setJustSymbol(JustSymbolEnum justSymbol) {
+ this.justSymbol = justSymbol;
+ }
+
+ public EnumArrays arrayEnum(List 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
+ */
+
+ public List getArrayEnum() {
+ return arrayEnum;
+ }
+
+ public void setArrayEnum(List 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/EnumClass.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/EnumClass.java
new file mode 100644
index 000000000000..e8d71812f075
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/EnumClass.java
@@ -0,0 +1,56 @@
+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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets EnumClass
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/EnumTest.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/EnumTest.java
new file mode 100644
index 000000000000..b5e97d1f98e6
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/EnumTest.java
@@ -0,0 +1,320 @@
+package 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.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import org.openapitools.model.OuterEnum;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * EnumTest
+ */
+
+@JsonTypeName("Enum_Test")
+@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
+ */
+
+ 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
+ */
+ @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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/File.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/File.java
new file mode 100644
index 000000000000..379835e79976
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/File.java
@@ -0,0 +1,80 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Must be named `File` for test.
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class File {
+
+ @JsonProperty("sourceURI")
+ private String sourceURI;
+
+ public File sourceURI(String sourceURI) {
+ this.sourceURI = sourceURI;
+ return this;
+ }
+
+ /**
+ * Test capitalization
+ * @return sourceURI
+ */
+
+ public String getSourceURI() {
+ return sourceURI;
+ }
+
+ public void setSourceURI(String sourceURI) {
+ this.sourceURI = sourceURI;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ File file = (File) o;
+ return Objects.equals(this.sourceURI, file.sourceURI);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(sourceURI);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class File {\n");
+ sb.append(" sourceURI: ").append(toIndentedString(sourceURI)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/FileSchemaTestClass.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/FileSchemaTestClass.java
new file mode 100644
index 000000000000..b0d309b5765b
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/FileSchemaTestClass.java
@@ -0,0 +1,115 @@
+package 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.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * FileSchemaTestClass
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class FileSchemaTestClass {
+
+ @JsonProperty("file")
+ private File file;
+
+ @JsonProperty("files")
+
+ private List files = null;
+
+ public FileSchemaTestClass file(File file) {
+ this.file = file;
+ return this;
+ }
+
+ /**
+ * Get file
+ * @return file
+ */
+
+ public File getFile() {
+ return file;
+ }
+
+ public void setFile(File file) {
+ this.file = file;
+ }
+
+ public FileSchemaTestClass files(List files) {
+ this.files = files;
+ return this;
+ }
+
+ public FileSchemaTestClass addFilesItem(File filesItem) {
+ if (this.files == null) {
+ this.files = new ArrayList<>();
+ }
+ this.files.add(filesItem);
+ return this;
+ }
+
+ /**
+ * Get files
+ * @return files
+ */
+
+ public List getFiles() {
+ return files;
+ }
+
+ public void setFiles(List 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/FormatTest.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/FormatTest.java
new file mode 100644
index 000000000000..6d4ecbf01a0e
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/FormatTest.java
@@ -0,0 +1,399 @@
+package 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.JsonTypeName;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.util.Arrays;
+import java.util.UUID;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * FormatTest
+ */
+
+@JsonTypeName("format_test")
+@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")
+ @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
+ private LocalDate date;
+
+ @JsonProperty("dateTime")
+ @DateTimeFormat(iso = 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+ @NotNull
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+ @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
+ */
+
+ 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
+ */
+ @NotNull
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+ @NotNull
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
new file mode 100644
index 000000000000..9d186aad54e8
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/HasOnlyReadOnly.java
@@ -0,0 +1,105 @@
+package 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.JsonTypeName;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * HasOnlyReadOnly
+ */
+
+@JsonTypeName("hasOnlyReadOnly")
+@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
+ */
+
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/MapTest.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/MapTest.java
new file mode 100644
index 000000000000..f9c40fdd60e2
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/MapTest.java
@@ -0,0 +1,223 @@
+package 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.Map;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * MapTest
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MapTest {
+
+ @JsonProperty("map_map_of_string")
+
+ private Map> 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")
+
+ private Map mapOfEnumString = null;
+
+ @JsonProperty("direct_map")
+
+ private Map directMap = null;
+
+ @JsonProperty("indirect_map")
+
+ private Map indirectMap = null;
+
+ public MapTest mapMapOfString(Map> mapMapOfString) {
+ this.mapMapOfString = mapMapOfString;
+ return this;
+ }
+
+ public MapTest putMapMapOfStringItem(String key, Map mapMapOfStringItem) {
+ if (this.mapMapOfString == null) {
+ this.mapMapOfString = new HashMap<>();
+ }
+ this.mapMapOfString.put(key, mapMapOfStringItem);
+ return this;
+ }
+
+ /**
+ * Get mapMapOfString
+ * @return mapMapOfString
+ */
+
+ public Map> getMapMapOfString() {
+ return mapMapOfString;
+ }
+
+ public void setMapMapOfString(Map> mapMapOfString) {
+ this.mapMapOfString = mapMapOfString;
+ }
+
+ public MapTest mapOfEnumString(Map 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
+ */
+
+ public Map getMapOfEnumString() {
+ return mapOfEnumString;
+ }
+
+ public void setMapOfEnumString(Map mapOfEnumString) {
+ this.mapOfEnumString = mapOfEnumString;
+ }
+
+ public MapTest directMap(Map 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
+ */
+
+ public Map getDirectMap() {
+ return directMap;
+ }
+
+ public void setDirectMap(Map directMap) {
+ this.directMap = directMap;
+ }
+
+ public MapTest indirectMap(Map 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
+ */
+
+ public Map getIndirectMap() {
+ return indirectMap;
+ }
+
+ public void setIndirectMap(Map 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
new file mode 100644
index 000000000000..1affd5d8362d
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java
@@ -0,0 +1,142 @@
+package 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.Map;
+import java.util.UUID;
+import org.openapitools.model.Animal;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * MixedPropertiesAndAdditionalPropertiesClass
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class MixedPropertiesAndAdditionalPropertiesClass {
+
+ @JsonProperty("uuid")
+ private UUID uuid;
+
+ @JsonProperty("dateTime")
+ @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
+ private OffsetDateTime dateTime;
+
+ @JsonProperty("map")
+
+ private Map map = null;
+
+ public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) {
+ this.uuid = uuid;
+ return this;
+ }
+
+ /**
+ * Get uuid
+ * @return uuid
+ */
+
+ 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
+ */
+
+ public OffsetDateTime getDateTime() {
+ return dateTime;
+ }
+
+ public void setDateTime(OffsetDateTime dateTime) {
+ this.dateTime = dateTime;
+ }
+
+ public MixedPropertiesAndAdditionalPropertiesClass map(Map 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
+ */
+
+ public Map getMap() {
+ return map;
+ }
+
+ public void setMap(Map 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Model200Response.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Model200Response.java
new file mode 100644
index 000000000000..5fb76af82848
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Model200Response.java
@@ -0,0 +1,105 @@
+package 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.JsonTypeName;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Model for testing model name starting with number
+ */
+
+@JsonTypeName("200_response")
+@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
+ */
+
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ModelApiResponse.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ModelApiResponse.java
new file mode 100644
index 000000000000..2d95cc265e9e
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ModelApiResponse.java
@@ -0,0 +1,128 @@
+package 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.JsonTypeName;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * ModelApiResponse
+ */
+
+@JsonTypeName("ApiResponse")
+@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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ModelList.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ModelList.java
new file mode 100644
index 000000000000..959f91cdfd3c
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ModelList.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 com.fasterxml.jackson.annotation.JsonTypeName;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * ModelList
+ */
+
+@JsonTypeName("List")
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public class ModelList {
+
+ @JsonProperty("123-list")
+ private String _123list;
+
+ public ModelList _123list(String _123list) {
+ this._123list = _123list;
+ return this;
+ }
+
+ /**
+ * Get _123list
+ * @return _123list
+ */
+
+ public String get123list() {
+ return _123list;
+ }
+
+ public void set123list(String _123list) {
+ this._123list = _123list;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ ModelList _list = (ModelList) o;
+ return Objects.equals(this._123list, _list._123list);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(_123list);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class ModelList {\n");
+ sb.append(" _123list: ").append(toIndentedString(_123list)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
+
diff --git a/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ModelReturn.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ModelReturn.java
new file mode 100644
index 000000000000..1dc48b70a7f3
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/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 com.fasterxml.jackson.annotation.JsonTypeName;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Model for testing reserved words
+ */
+
+@JsonTypeName("Return")
+@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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Name.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Name.java
new file mode 100644
index 000000000000..bc0467bafa06
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Name.java
@@ -0,0 +1,149 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Model for testing model name same as property name
+ */
+
+@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
+ */
+ @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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/NumberOnly.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/NumberOnly.java
new file mode 100644
index 000000000000..a634326a1f80
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/NumberOnly.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 java.math.BigDecimal;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * NumberOnly
+ */
+
+@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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Order.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Order.java
new file mode 100644
index 000000000000..3eb6bc62e11d
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Order.java
@@ -0,0 +1,236 @@
+package 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.springframework.format.annotation.DateTimeFormat;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Order
+ */
+
+@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")
+ @DateTimeFormat(iso = 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/OuterComposite.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/OuterComposite.java
new file mode 100644
index 000000000000..ddc31ebfb442
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/OuterComposite.java
@@ -0,0 +1,127 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * OuterComposite
+ */
+
+@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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/OuterEnum.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/OuterEnum.java
new file mode 100644
index 000000000000..d5dc5fcc14f2
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/OuterEnum.java
@@ -0,0 +1,56 @@
+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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Gets or Sets OuterEnum
+ */
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Pet.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Pet.java
new file mode 100644
index 000000000000..40474b46031d
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Pet.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 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Pet
+ */
+
+@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")
+
+ private Set photoUrls = new LinkedHashSet<>();
+
+ @JsonProperty("tags")
+
+ private List 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+ @NotNull
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Pet photoUrls(Set photoUrls) {
+ this.photoUrls = photoUrls;
+ return this;
+ }
+
+ public Pet addPhotoUrlsItem(String photoUrlsItem) {
+ this.photoUrls.add(photoUrlsItem);
+ return this;
+ }
+
+ /**
+ * Get photoUrls
+ * @return photoUrls
+ */
+ @NotNull
+ public Set getPhotoUrls() {
+ return photoUrls;
+ }
+
+ @JsonDeserialize(as = LinkedHashSet.class)
+ public void setPhotoUrls(Set photoUrls) {
+ this.photoUrls = photoUrls;
+ }
+
+ public Pet tags(List 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
+ */
+
+ public List getTags() {
+ return tags;
+ }
+
+ public void setTags(List tags) {
+ this.tags = tags;
+ }
+
+ public Pet status(StatusEnum status) {
+ this.status = status;
+ return this;
+ }
+
+ /**
+ * pet status in the store
+ * @return status
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ReadOnlyFirst.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ReadOnlyFirst.java
new file mode 100644
index 000000000000..9c1b537ab92d
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/ReadOnlyFirst.java
@@ -0,0 +1,103 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * ReadOnlyFirst
+ */
+
+@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
+ */
+
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/SpecialModelName.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/SpecialModelName.java
new file mode 100644
index 000000000000..90be05037e45
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/SpecialModelName.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 com.fasterxml.jackson.annotation.JsonTypeName;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.time.OffsetDateTime;
+import jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * SpecialModelName
+ */
+
+@JsonTypeName("$special[model.name]")
+@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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Tag.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Tag.java
new file mode 100644
index 000000000000..f2fb6ae6006d
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/Tag.java
@@ -0,0 +1,103 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * Tag
+ */
+
+@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
+ */
+
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/TypeHolderDefault.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/TypeHolderDefault.java
new file mode 100644
index 000000000000..638a79b6a315
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/TypeHolderDefault.java
@@ -0,0 +1,181 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * TypeHolderDefault
+ */
+
+@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")
+
+ private List arrayItem = new ArrayList<>();
+
+ public TypeHolderDefault stringItem(String stringItem) {
+ this.stringItem = stringItem;
+ return this;
+ }
+
+ /**
+ * Get stringItem
+ * @return stringItem
+ */
+ @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
+ */
+ @NotNull
+ 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
+ */
+ @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
+ */
+ @NotNull
+ public Boolean getBoolItem() {
+ return boolItem;
+ }
+
+ public void setBoolItem(Boolean boolItem) {
+ this.boolItem = boolItem;
+ }
+
+ public TypeHolderDefault arrayItem(List arrayItem) {
+ this.arrayItem = arrayItem;
+ return this;
+ }
+
+ public TypeHolderDefault addArrayItemItem(Integer arrayItemItem) {
+ this.arrayItem.add(arrayItemItem);
+ return this;
+ }
+
+ /**
+ * Get arrayItem
+ * @return arrayItem
+ */
+ @NotNull
+ public List getArrayItem() {
+ return arrayItem;
+ }
+
+ public void setArrayItem(List 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/TypeHolderExample.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/TypeHolderExample.java
new file mode 100644
index 000000000000..8e9f40d83315
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/TypeHolderExample.java
@@ -0,0 +1,204 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * TypeHolderExample
+ */
+
+@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")
+
+ private List arrayItem = new ArrayList<>();
+
+ public TypeHolderExample stringItem(String stringItem) {
+ this.stringItem = stringItem;
+ return this;
+ }
+
+ /**
+ * Get stringItem
+ * @return stringItem
+ */
+ @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
+ */
+ @NotNull
+ 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
+ */
+ @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
+ */
+ @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
+ */
+ @NotNull
+ public Boolean getBoolItem() {
+ return boolItem;
+ }
+
+ public void setBoolItem(Boolean boolItem) {
+ this.boolItem = boolItem;
+ }
+
+ public TypeHolderExample arrayItem(List arrayItem) {
+ this.arrayItem = arrayItem;
+ return this;
+ }
+
+ public TypeHolderExample addArrayItemItem(Integer arrayItemItem) {
+ this.arrayItem.add(arrayItemItem);
+ return this;
+ }
+
+ /**
+ * Get arrayItem
+ * @return arrayItem
+ */
+ @NotNull
+ public List getArrayItem() {
+ return arrayItem;
+ }
+
+ public void setArrayItem(List 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/User.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/User.java
new file mode 100644
index 000000000000..95d28312456f
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/User.java
@@ -0,0 +1,241 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * User
+ */
+
+@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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/XmlItem.java b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/XmlItem.java
new file mode 100644
index 000000000000..e93ad13b463d
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/XmlItem.java
@@ -0,0 +1,808 @@
+package 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 jakarta.validation.constraints.NotNull;
+
+
+import java.util.*;
+import jakarta.annotation.Generated;
+
+/**
+ * XmlItem
+ */
+
+@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")
+
+ private List 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")
+
+ private List nameArray = null;
+
+ @JsonProperty("name_wrapped_array")
+
+ private List 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")
+
+ private List prefixArray = null;
+
+ @JsonProperty("prefix_wrapped_array")
+
+ private List 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")
+
+ private List namespaceArray = null;
+
+ @JsonProperty("namespace_wrapped_array")
+
+ private List 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")
+
+ private List prefixNsArray = null;
+
+ @JsonProperty("prefix_ns_wrapped_array")
+
+ private List prefixNsWrappedArray = null;
+
+ public XmlItem attributeString(String attributeString) {
+ this.attributeString = attributeString;
+ return this;
+ }
+
+ /**
+ * Get attributeString
+ * @return attributeString
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ public Boolean getAttributeBoolean() {
+ return attributeBoolean;
+ }
+
+ public void setAttributeBoolean(Boolean attributeBoolean) {
+ this.attributeBoolean = attributeBoolean;
+ }
+
+ public XmlItem wrappedArray(List 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
+ */
+
+ public List getWrappedArray() {
+ return wrappedArray;
+ }
+
+ public void setWrappedArray(List wrappedArray) {
+ this.wrappedArray = wrappedArray;
+ }
+
+ public XmlItem nameString(String nameString) {
+ this.nameString = nameString;
+ return this;
+ }
+
+ /**
+ * Get nameString
+ * @return nameString
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ public Boolean getNameBoolean() {
+ return nameBoolean;
+ }
+
+ public void setNameBoolean(Boolean nameBoolean) {
+ this.nameBoolean = nameBoolean;
+ }
+
+ public XmlItem nameArray(List 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
+ */
+
+ public List getNameArray() {
+ return nameArray;
+ }
+
+ public void setNameArray(List nameArray) {
+ this.nameArray = nameArray;
+ }
+
+ public XmlItem nameWrappedArray(List 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
+ */
+
+ public List getNameWrappedArray() {
+ return nameWrappedArray;
+ }
+
+ public void setNameWrappedArray(List nameWrappedArray) {
+ this.nameWrappedArray = nameWrappedArray;
+ }
+
+ public XmlItem prefixString(String prefixString) {
+ this.prefixString = prefixString;
+ return this;
+ }
+
+ /**
+ * Get prefixString
+ * @return prefixString
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ public Boolean getPrefixBoolean() {
+ return prefixBoolean;
+ }
+
+ public void setPrefixBoolean(Boolean prefixBoolean) {
+ this.prefixBoolean = prefixBoolean;
+ }
+
+ public XmlItem prefixArray(List 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
+ */
+
+ public List getPrefixArray() {
+ return prefixArray;
+ }
+
+ public void setPrefixArray(List prefixArray) {
+ this.prefixArray = prefixArray;
+ }
+
+ public XmlItem prefixWrappedArray(List 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
+ */
+
+ public List getPrefixWrappedArray() {
+ return prefixWrappedArray;
+ }
+
+ public void setPrefixWrappedArray(List prefixWrappedArray) {
+ this.prefixWrappedArray = prefixWrappedArray;
+ }
+
+ public XmlItem namespaceString(String namespaceString) {
+ this.namespaceString = namespaceString;
+ return this;
+ }
+
+ /**
+ * Get namespaceString
+ * @return namespaceString
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ public Boolean getNamespaceBoolean() {
+ return namespaceBoolean;
+ }
+
+ public void setNamespaceBoolean(Boolean namespaceBoolean) {
+ this.namespaceBoolean = namespaceBoolean;
+ }
+
+ public XmlItem namespaceArray(List 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
+ */
+
+ public List getNamespaceArray() {
+ return namespaceArray;
+ }
+
+ public void setNamespaceArray(List namespaceArray) {
+ this.namespaceArray = namespaceArray;
+ }
+
+ public XmlItem namespaceWrappedArray(List 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
+ */
+
+ public List getNamespaceWrappedArray() {
+ return namespaceWrappedArray;
+ }
+
+ public void setNamespaceWrappedArray(List namespaceWrappedArray) {
+ this.namespaceWrappedArray = namespaceWrappedArray;
+ }
+
+ public XmlItem prefixNsString(String prefixNsString) {
+ this.prefixNsString = prefixNsString;
+ return this;
+ }
+
+ /**
+ * Get prefixNsString
+ * @return prefixNsString
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ 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
+ */
+
+ public Boolean getPrefixNsBoolean() {
+ return prefixNsBoolean;
+ }
+
+ public void setPrefixNsBoolean(Boolean prefixNsBoolean) {
+ this.prefixNsBoolean = prefixNsBoolean;
+ }
+
+ public XmlItem prefixNsArray(List 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
+ */
+
+ public List getPrefixNsArray() {
+ return prefixNsArray;
+ }
+
+ public void setPrefixNsArray(List prefixNsArray) {
+ this.prefixNsArray = prefixNsArray;
+ }
+
+ public XmlItem prefixNsWrappedArray(List 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
+ */
+
+ public List getPrefixNsWrappedArray() {
+ return prefixNsWrappedArray;
+ }
+
+ public void setPrefixNsWrappedArray(List 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/client/petstore/spring-http-interface/.openapi-generator-ignore b/samples/client/petstore/spring-http-interface/.openapi-generator-ignore
new file mode 100644
index 000000000000..7484ee590a38
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface/.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-http-interface/.openapi-generator/FILES b/samples/client/petstore/spring-http-interface/.openapi-generator/FILES
new file mode 100644
index 000000000000..9c06c7689f43
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface/.openapi-generator/FILES
@@ -0,0 +1,57 @@
+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/configuration/HttpInterfacesAbstractConfigurator.java
+src/main/java/org/openapitools/model/AdditionalPropertiesAnyTypeDto.java
+src/main/java/org/openapitools/model/AdditionalPropertiesArrayDto.java
+src/main/java/org/openapitools/model/AdditionalPropertiesBooleanDto.java
+src/main/java/org/openapitools/model/AdditionalPropertiesClassDto.java
+src/main/java/org/openapitools/model/AdditionalPropertiesIntegerDto.java
+src/main/java/org/openapitools/model/AdditionalPropertiesNumberDto.java
+src/main/java/org/openapitools/model/AdditionalPropertiesObjectDto.java
+src/main/java/org/openapitools/model/AdditionalPropertiesStringDto.java
+src/main/java/org/openapitools/model/AnimalDto.java
+src/main/java/org/openapitools/model/ApiResponseDto.java
+src/main/java/org/openapitools/model/ArrayOfArrayOfNumberOnlyDto.java
+src/main/java/org/openapitools/model/ArrayOfNumberOnlyDto.java
+src/main/java/org/openapitools/model/ArrayTestDto.java
+src/main/java/org/openapitools/model/BigCatAllOfDto.java
+src/main/java/org/openapitools/model/BigCatDto.java
+src/main/java/org/openapitools/model/CapitalizationDto.java
+src/main/java/org/openapitools/model/CatAllOfDto.java
+src/main/java/org/openapitools/model/CatDto.java
+src/main/java/org/openapitools/model/CategoryDto.java
+src/main/java/org/openapitools/model/ClassModelDto.java
+src/main/java/org/openapitools/model/ClientDto.java
+src/main/java/org/openapitools/model/DogAllOfDto.java
+src/main/java/org/openapitools/model/DogDto.java
+src/main/java/org/openapitools/model/EnumArraysDto.java
+src/main/java/org/openapitools/model/EnumClassDto.java
+src/main/java/org/openapitools/model/EnumTestDto.java
+src/main/java/org/openapitools/model/FileDto.java
+src/main/java/org/openapitools/model/FileSchemaTestClassDto.java
+src/main/java/org/openapitools/model/FormatTestDto.java
+src/main/java/org/openapitools/model/HasOnlyReadOnlyDto.java
+src/main/java/org/openapitools/model/ListDto.java
+src/main/java/org/openapitools/model/MapTestDto.java
+src/main/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClassDto.java
+src/main/java/org/openapitools/model/Model200ResponseDto.java
+src/main/java/org/openapitools/model/NameDto.java
+src/main/java/org/openapitools/model/NumberOnlyDto.java
+src/main/java/org/openapitools/model/OrderDto.java
+src/main/java/org/openapitools/model/OuterCompositeDto.java
+src/main/java/org/openapitools/model/OuterEnumDto.java
+src/main/java/org/openapitools/model/PetDto.java
+src/main/java/org/openapitools/model/ReadOnlyFirstDto.java
+src/main/java/org/openapitools/model/ReturnDto.java
+src/main/java/org/openapitools/model/SpecialModelNameDto.java
+src/main/java/org/openapitools/model/TagDto.java
+src/main/java/org/openapitools/model/TypeHolderDefaultDto.java
+src/main/java/org/openapitools/model/TypeHolderExampleDto.java
+src/main/java/org/openapitools/model/UserDto.java
+src/main/java/org/openapitools/model/XmlItemDto.java
diff --git a/samples/client/petstore/spring-http-interface/.openapi-generator/VERSION b/samples/client/petstore/spring-http-interface/.openapi-generator/VERSION
new file mode 100644
index 000000000000..d6b4ec4aa783
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface/.openapi-generator/VERSION
@@ -0,0 +1 @@
+6.3.0-SNAPSHOT
\ No newline at end of file
diff --git a/samples/client/petstore/spring-http-interface/README.md b/samples/client/petstore/spring-http-interface/README.md
new file mode 100644
index 000000000000..d947e03a2484
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface/README.md
@@ -0,0 +1,21 @@
+# OpenAPI generated API stub
+
+[Spring Framework 6 HTTP Interface](https://docs.spring.io/spring-framework/docs/6.0.0/reference/html/integration.html#rest-http-interface)
+
+
+## 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 application for HTTP integration with other REST services
+To use auto-generated interfaces you have to create your own configuration which extends default abstract configurator & provide `WebClient` instance via constructor
+```java
+@Configuration
+public class MyConfiguration extends org.openapitools.configuration.HttpInterfacesAbstractConfigurator {
+
+ public MyConfiguration(WebClient myWebClient) { // separately created WebClient instance
+ super(myWebClient);
+ }
+}
+```
\ No newline at end of file
diff --git a/samples/client/petstore/spring-http-interface/pom.xml b/samples/client/petstore/spring-http-interface/pom.xml
new file mode 100644
index 000000000000..64a11d3b176a
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface/pom.xml
@@ -0,0 +1,76 @@
+
+ 4.0.0
+ org.openapitools
+ spring-http-interface
+ jar
+ spring-http-interface
+ 1.0.0-SNAPSHOT
+
+ 17
+ UTF-8
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.0.1
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ ${java.version}
+ ${java.version}
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.2.1
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
+
+
+ com.google.code.findbugs
+ jsr305
+ 3.0.2
+
+
+ jakarta.validation
+ jakarta.validation-api
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
+
+ org.openapitools
+ jackson-databind-nullable
+ 0.2.2
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
diff --git a/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/AnotherFakeApi.java
new file mode 100644
index 000000000000..b343cdde8641
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/AnotherFakeApi.java
@@ -0,0 +1,40 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (6.3.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.ClientDto;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.service.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import jakarta.annotation.Generated;
+
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+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)
+ */
+ @HttpExchange(
+ method = "PATCH",
+ value = "/another-fake/dummy",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ ResponseEntity call123testSpecialTags(
+ @RequestBody ClientDto body
+ );
+
+}
diff --git a/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/FakeApi.java b/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/FakeApi.java
new file mode 100644
index 000000000000..a236b0b04ea5
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/FakeApi.java
@@ -0,0 +1,342 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (6.3.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.math.BigDecimal;
+import org.openapitools.model.ClientDto;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.openapitools.model.FileSchemaTestClassDto;
+import java.time.LocalDate;
+import java.util.Map;
+import java.time.OffsetDateTime;
+import org.openapitools.model.OuterCompositeDto;
+import org.openapitools.model.UserDto;
+import org.openapitools.model.XmlItemDto;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.service.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import jakarta.annotation.Generated;
+
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/create_xml_item",
+ accept = "application/json",
+ contentType = "application/xml"
+ )
+ ResponseEntity createXmlItem(
+ @RequestBody XmlItemDto 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/outer/boolean",
+ accept = "*/*",
+ contentType = "*/*"
+ )
+ ResponseEntity fakeOuterBooleanSerialize(
+ @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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/outer/composite",
+ accept = "*/*",
+ contentType = "*/*"
+ )
+ ResponseEntity fakeOuterCompositeSerialize(
+ @RequestBody(required = false) OuterCompositeDto 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/outer/number",
+ accept = "*/*",
+ contentType = "*/*"
+ )
+ ResponseEntity fakeOuterNumberSerialize(
+ @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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/outer/string",
+ accept = "*/*",
+ contentType = "*/*"
+ )
+ ResponseEntity fakeOuterStringSerialize(
+ @RequestBody(required = false) String body
+ );
+
+
+ /**
+ * PUT /fake/body-with-file-schema
+ * For this test, the body for this request much reference a schema named `File`.
+ *
+ * @param body (required)
+ * @return Success (status code 200)
+ */
+ @HttpExchange(
+ method = "PUT",
+ value = "/fake/body-with-file-schema",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ ResponseEntity testBodyWithFileSchema(
+ @RequestBody FileSchemaTestClassDto body
+ );
+
+
+ /**
+ * PUT /fake/body-with-query-params
+ *
+ * @param query (required)
+ * @param body (required)
+ * @return Success (status code 200)
+ */
+ @HttpExchange(
+ method = "PUT",
+ value = "/fake/body-with-query-params",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ ResponseEntity testBodyWithQueryParams(
+ @RequestParam(value = "query", required = true) String query,
+ @RequestBody UserDto body
+ );
+
+
+ /**
+ * PATCH /fake : To test \"client\" model
+ * To test \"client\" model
+ *
+ * @param body client model (required)
+ * @return successful operation (status code 200)
+ */
+ @HttpExchange(
+ method = "PATCH",
+ value = "/fake",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ ResponseEntity testClientModel(
+ @RequestBody ClientDto 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake",
+ accept = "application/json",
+ contentType = "application/x-www-form-urlencoded"
+ )
+ ResponseEntity testEndpointParameters(
+ @RequestParam(value = "number", required = true) BigDecimal number,
+ @RequestParam(value = "double", required = true) Double _double,
+ @RequestParam(value = "pattern_without_delimiter", required = true) String patternWithoutDelimiter,
+ @RequestParam(value = "byte", required = true) byte[] _byte,
+ @RequestParam(value = "integer", required = false) Integer integer,
+ @RequestParam(value = "int32", required = false) Integer int32,
+ @RequestParam(value = "int64", required = false) Long int64,
+ @RequestParam(value = "float", required = false) Float _float,
+ @RequestParam(value = "string", required = false) String string,
+ @RequestPart(value = "binary", required = false) MultipartFile binary,
+ @RequestParam(value = "date", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date,
+ @RequestParam(value = "dateTime", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) OffsetDateTime dateTime,
+ @RequestParam(value = "password", required = false) String password,
+ @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)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/fake",
+ accept = "application/json",
+ contentType = "application/x-www-form-urlencoded"
+ )
+ ResponseEntity testEnumParameters(
+ @RequestHeader(value = "enum_header_string_array", required = false) List enumHeaderStringArray,
+ @RequestHeader(value = "enum_header_string", required = false, defaultValue = "-efg") String enumHeaderString,
+ @RequestParam(value = "enum_query_string_array", required = false) List enumQueryStringArray,
+ @RequestParam(value = "enum_query_string", required = false, defaultValue = "-efg") String enumQueryString,
+ @RequestParam(value = "enum_query_integer", required = false) Integer enumQueryInteger,
+ @RequestParam(value = "enum_query_double", required = false) Double enumQueryDouble,
+ @RequestPart(value = "enum_form_string_array", required = false) List enumFormStringArray,
+ @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 Something wrong (status code 400)
+ */
+ @HttpExchange(
+ method = "DELETE",
+ value = "/fake",
+ accept = "application/json"
+ )
+ ResponseEntity testGroupParameters(
+ @RequestParam(value = "required_string_group", required = true) Integer requiredStringGroup,
+ @RequestHeader(value = "required_boolean_group", required = true) Boolean requiredBooleanGroup,
+ @RequestParam(value = "required_int64_group", required = true) Long requiredInt64Group,
+ @RequestParam(value = "string_group", required = false) Integer stringGroup,
+ @RequestHeader(value = "boolean_group", required = false) Boolean booleanGroup,
+ @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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/inline-additionalProperties",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ ResponseEntity testInlineAdditionalProperties(
+ @RequestBody Map param
+ );
+
+
+ /**
+ * GET /fake/jsonFormData : test json serialization of form data
+ *
+ * @param param field1 (required)
+ * @param param2 field2 (required)
+ * @return successful operation (status code 200)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/fake/jsonFormData",
+ accept = "application/json",
+ contentType = "application/x-www-form-urlencoded"
+ )
+ ResponseEntity testJsonFormData(
+ @RequestParam(value = "param", required = true) String param,
+ @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)
+ */
+ @HttpExchange(
+ method = "PUT",
+ value = "/fake/test-query-parameters",
+ accept = "application/json"
+ )
+ ResponseEntity testQueryParameterCollectionFormat(
+ @RequestParam(value = "pipe", required = true) List pipe,
+ @RequestParam(value = "ioutil", required = true) List ioutil,
+ @RequestParam(value = "http", required = true) List http,
+ @RequestParam(value = "url", required = true) List url,
+ @RequestParam(value = "context", required = true) List context
+ );
+
+}
diff --git a/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/FakeClassnameTags123Api.java b/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/FakeClassnameTags123Api.java
new file mode 100644
index 000000000000..26274bafddad
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/FakeClassnameTags123Api.java
@@ -0,0 +1,40 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (6.3.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.ClientDto;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.service.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import jakarta.annotation.Generated;
+
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+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)
+ */
+ @HttpExchange(
+ method = "PATCH",
+ value = "/fake_classname_test",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ ResponseEntity testClassname(
+ @RequestBody ClientDto body
+ );
+
+}
diff --git a/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/PetApi.java
new file mode 100644
index 000000000000..8d9ffa1e9006
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/PetApi.java
@@ -0,0 +1,201 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (6.3.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.ApiResponseDto;
+import org.openapitools.model.PetDto;
+import java.util.Set;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.service.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import jakarta.annotation.Generated;
+
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/pet",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ ResponseEntity addPet(
+ @RequestBody PetDto 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)
+ */
+ @HttpExchange(
+ method = "DELETE",
+ value = "/pet/{petId}",
+ accept = "application/json"
+ )
+ ResponseEntity deletePet(
+ @PathVariable("petId") Long petId,
+ @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)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/pet/findByStatus",
+ accept = "application/json"
+ )
+ ResponseEntity> findPetsByStatus(
+ @RequestParam(value = "status", required = true) List 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
+ */
+ @Deprecated
+ @HttpExchange(
+ method = "GET",
+ value = "/pet/findByTags",
+ accept = "application/json"
+ )
+ ResponseEntity> findPetsByTags(
+ @RequestParam(value = "tags", required = true) Set 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)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/pet/{petId}",
+ accept = "application/json"
+ )
+ ResponseEntity getPetById(
+ @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)
+ */
+ @HttpExchange(
+ method = "PUT",
+ value = "/pet",
+ accept = "application/json",
+ contentType = "application/json"
+ )
+ ResponseEntity updatePet(
+ @RequestBody PetDto 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/pet/{petId}",
+ accept = "application/json",
+ contentType = "application/x-www-form-urlencoded"
+ )
+ ResponseEntity updatePetWithForm(
+ @PathVariable("petId") Long petId,
+ @RequestParam(value = "name", required = false) String name,
+ @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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/pet/{petId}/uploadImage",
+ accept = "application/json",
+ contentType = "multipart/form-data"
+ )
+ ResponseEntity uploadFile(
+ @PathVariable("petId") Long petId,
+ @RequestParam(value = "additionalMetadata", required = false) String additionalMetadata,
+ @RequestPart(value = "file", required = false) 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)
+ */
+ @HttpExchange(
+ method = "POST",
+ value = "/fake/{petId}/uploadImageWithRequiredFile",
+ accept = "application/json",
+ contentType = "multipart/form-data"
+ )
+ ResponseEntity uploadFileWithRequiredFile(
+ @PathVariable("petId") Long petId,
+ @RequestPart(value = "requiredFile", required = true) MultipartFile requiredFile,
+ @RequestParam(value = "additionalMetadata", required = false) String additionalMetadata
+ );
+
+}
diff --git a/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/StoreApi.java
new file mode 100644
index 000000000000..79d32d04edce
--- /dev/null
+++ b/samples/client/petstore/spring-http-interface/src/main/java/org/openapitools/api/StoreApi.java
@@ -0,0 +1,94 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (6.3.0-SNAPSHOT).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import java.util.Map;
+import org.openapitools.model.OrderDto;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.service.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import jakarta.annotation.Generated;
+
+
+@Generated(value = "org.openapitools.codegen.languages.SpringCodegen")
+public interface StoreApi {
+
+ /**
+ * DELETE /store/order/{order_id} : Delete purchase order by ID
+ * For valid response try integer IDs with value < 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)
+ */
+ @HttpExchange(
+ method = "DELETE",
+ value = "/store/order/{order_id}",
+ accept = "application/json"
+ )
+ ResponseEntity deleteOrder(
+ @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)
+ */
+ @HttpExchange(
+ method = "GET",
+ value = "/store/inventory",
+ accept = "application/json"
+ )
+ ResponseEntity