From bde43b41047804ee512505af2f01a38d856d6740 Mon Sep 17 00:00:00 2001 From: Jorge Date: Tue, 16 Jun 2026 15:58:03 +0200 Subject: [PATCH 01/15] feat: add optional getters for nullable fields --- .../languages/AbstractJavaCodegen.java | 5 ++ .../Java/libraries/restclient/pojo.mustache | 9 +++- .../Java/libraries/resttemplate/pojo.mustache | 9 +++- .../Java/libraries/webclient/pojo.mustache | 9 +++- .../src/main/resources/Java/pojo.mustache | 9 +++- .../main/resources/JavaSpring/pojo.mustache | 11 ++++- .../codegen/java/JavaClientCodegenTest.java | 43 ++++++++++++++++ .../java/spring/SpringCodegenTest.java | 49 +++++++++++++++++++ 8 files changed, 139 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index 14274d55708a..eebb81169fda 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -119,6 +119,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code public static final String DEFAULT_TEST_FOLDER = "${project.build.directory}/generated-test-sources/openapi"; public static final String GENERATE_CONSTRUCTOR_WITH_ALL_ARGS = "generateConstructorWithAllArgs"; public static final String GENERATE_BUILDERS = "generateBuilders"; + public static final String OPTIONAL_GETTERS_FOR_NULLABLE_FIELDS_ONLY = "optionalGettersForNullableFieldsOnly"; @Getter @Setter protected String dateLibrary = "java8"; @@ -182,6 +183,8 @@ protected enum ENUM_PROPERTY_NAMING_TYPE {MACRO_CASE, legacy, original} @Getter @Setter protected String booleanGetterPrefix = "get"; @Setter protected boolean ignoreAnyOfInEnum = false; + @Getter @Setter + protected boolean optionalGettersForNullableFieldsOnly = false; @Setter protected String parentGroupId = ""; @Setter protected String parentArtifactId = ""; @Setter protected String parentVersion = ""; @@ -370,6 +373,7 @@ public AbstractJavaCodegen() { cliOptions.add(CliOption.newBoolean(CONTAINER_DEFAULT_TO_NULL, "Set containers (array, set, map) default to null")); cliOptions.add(CliOption.newBoolean(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, "whether to generate a constructor for all arguments").defaultValue(Boolean.FALSE.toString())); cliOptions.add(CliOption.newBoolean(GENERATE_BUILDERS, "Whether to generate builders for models").defaultValue(Boolean.FALSE.toString())); + cliOptions.add(CliOption.newBoolean(OPTIONAL_GETTERS_FOR_NULLABLE_FIELDS_ONLY, "Make getters of nullable / non-required fields return Optional while keeping the field and setter as the raw type. Opt-in, disabled by default.", optionalGettersForNullableFieldsOnly)); cliOptions.add(CliOption.newBoolean(DISABLE_DISCRIMINATOR_JSON_IGNORE_PROPERTIES, "Ignore discriminator field type for Jackson serialization", disableDiscriminatorJsonIgnoreProperties)); cliOptions.add(CliOption.newString(CodegenConstants.PARENT_GROUP_ID, CodegenConstants.PARENT_GROUP_ID_DESC)); @@ -452,6 +456,7 @@ public void processOpts() { convertPropertyToBooleanAndWriteBack(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, this::setGenerateConstructorWithAllArgs); convertPropertyToBooleanAndWriteBack(GENERATE_BUILDERS, this::setGenerateBuilders); + convertPropertyToBooleanAndWriteBack(OPTIONAL_GETTERS_FOR_NULLABLE_FIELDS_ONLY, this::setOptionalGettersForNullableFieldsOnly); convertPropertyToBooleanAndWriteBack(DISABLE_DISCRIMINATOR_JSON_IGNORE_PROPERTIES, this::setDisableDiscriminatorJsonIgnoreProperties); if (StringUtils.isEmpty(System.getenv("JAVA_POST_PROCESS_FILE"))) { LOGGER.info("Environment variable JAVA_POST_PROCESS_FILE not defined so the Java code may not be properly formatted. To define it, try 'export JAVA_POST_PROCESS_FILE=\"/usr/local/bin/clang-format -i\"' (Linux/Mac)"); diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache index e4e1115bb81e..6ee8e5d94e10 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache @@ -240,7 +240,7 @@ public {{>sealed}}class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#v @JsonIgnore {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} - public {{>nullableDatatypeWithEnum}} {{getter}}() { + public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDatatypeWithEnum}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { {{#vendorExtensions.x-is-jackson-optional-nullable}} {{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} if ({{name}} == null) { @@ -250,7 +250,14 @@ public {{>sealed}}class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#v return {{name}}.orElse(null); {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}} + {{#optionalGettersForNullableFieldsOnly}}{{^required}} + return java.util.Optional.ofNullable({{name}}); + {{/required}}{{#required}} return {{name}}; + {{/required}}{{/optionalGettersForNullableFieldsOnly}} + {{^optionalGettersForNullableFieldsOnly}} + return {{name}}; + {{/optionalGettersForNullableFieldsOnly}} {{/vendorExtensions.x-is-jackson-optional-nullable}} } diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache index e9cb30b15220..07bf4c2c9c48 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache @@ -240,7 +240,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens @JsonIgnore {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} - public {{>nullableDatatypeWithEnum}} {{getter}}() { + public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDatatypeWithEnum}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { {{#vendorExtensions.x-is-jackson-optional-nullable}} {{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} if ({{name}} == null) { @@ -250,7 +250,14 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens return {{name}}.orElse(null); {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}} + {{#optionalGettersForNullableFieldsOnly}}{{^required}} + return java.util.Optional.ofNullable({{name}}); + {{/required}}{{#required}} return {{name}}; + {{/required}}{{/optionalGettersForNullableFieldsOnly}} + {{^optionalGettersForNullableFieldsOnly}} + return {{name}}; + {{/optionalGettersForNullableFieldsOnly}} {{/vendorExtensions.x-is-jackson-optional-nullable}} } diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache index f13da87167ab..10211fa9aded 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache @@ -240,7 +240,7 @@ public {{>sealed}}class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#v @JsonIgnore {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} - public {{>nullableDatatypeWithEnum}} {{getter}}() { + public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDatatypeWithEnum}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { {{#vendorExtensions.x-is-jackson-optional-nullable}} {{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} if ({{name}} == null) { @@ -250,7 +250,14 @@ public {{>sealed}}class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#v return {{name}}.orElse(null); {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}} + {{#optionalGettersForNullableFieldsOnly}}{{^required}} + return java.util.Optional.ofNullable({{name}}); + {{/required}}{{#required}} return {{name}}; + {{/required}}{{/optionalGettersForNullableFieldsOnly}} + {{^optionalGettersForNullableFieldsOnly}} + return {{name}}; + {{/optionalGettersForNullableFieldsOnly}} {{/vendorExtensions.x-is-jackson-optional-nullable}} } diff --git a/modules/openapi-generator/src/main/resources/Java/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/pojo.mustache index e09c78fa90f2..aa536c540301 100644 --- a/modules/openapi-generator/src/main/resources/Java/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/pojo.mustache @@ -243,7 +243,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens @JsonIgnore {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} - public {{{datatypeWithEnum}}} {{getter}}() { + public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{{datatypeWithEnum}}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { {{#vendorExtensions.x-is-jackson-optional-nullable}} {{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} if ({{name}} == null) { @@ -253,7 +253,14 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens return {{name}}.orElse(null); {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}} + {{#optionalGettersForNullableFieldsOnly}}{{^required}} + return java.util.Optional.ofNullable({{name}}); + {{/required}}{{#required}} return {{name}}; + {{/required}}{{/optionalGettersForNullableFieldsOnly}} + {{^optionalGettersForNullableFieldsOnly}} + return {{name}}; + {{/optionalGettersForNullableFieldsOnly}} {{/vendorExtensions.x-is-jackson-optional-nullable}} } diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache index 43c075ac5d4a..11cc6fd56079 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache @@ -228,8 +228,17 @@ public {{>sealed}}class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}} {{#deprecated}} @Deprecated {{/deprecated}} -{{#jackson}}{{>jackson_annotations}}{{/jackson}}{{#withXml}}{{>xmlAccessorAnnotation}}{{/withXml}} public {{>nullableAnnotation}}{{>nullableDataTypeBeanValidation}} {{getter}}() { +{{#jackson}}{{>jackson_annotations}}{{/jackson}}{{#withXml}}{{>xmlAccessorAnnotation}}{{/withXml}} public {{>nullableAnnotation}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isNullable}}java.util.Optional<{{/isNullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDataTypeBeanValidation}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isNullable}}>{{/isNullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { + {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isNullable}} + return java.util.Optional.ofNullable({{name}}); + {{/isNullable}}{{#isNullable}} return {{name}}; + {{/isNullable}}{{/required}}{{#required}} + return {{name}}; + {{/required}}{{/optionalGettersForNullableFieldsOnly}} + {{^optionalGettersForNullableFieldsOnly}} + return {{name}}; + {{/optionalGettersForNullableFieldsOnly}} } {{/lombok.Getter}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index 2fc1135296a5..0e4b454cf322 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -4536,5 +4536,48 @@ public void testUseDeductionForOneInterfaces() { } + @Test + public void testOptionalGettersForNullableFieldsOnly() { + final Path output = newTempFolder(); + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName(JAVA_GENERATOR) + .setLibrary(JavaClientCodegen.RESTCLIENT) + .addAdditionalProperty(AbstractJavaCodegen.OPTIONAL_GETTERS_FOR_NULLABLE_FIELDS_ONLY, true) + .setInputSpec("src/test/resources/3_0/java/builder.yaml") + .setOutputDir(output.toString().replace("\\", "/")); + + List files = new DefaultGenerator().opts(configurator.toClientOptInput()).generate(); + + // Generated sources must compile (validates Optional getter + raw field/setter are consistent). + validateJavaSourceFiles(files); + + assertThat(output.resolve("src/main/java/org/openapitools/client/model/SimpleObject.java")).content().contains( + "public java.util.Optional getSimple() {", + "return java.util.Optional.ofNullable(simple);", + "private String simple;", + "public void setSimple(@jakarta.annotation.Nullable String simple) {" + ); + // Nullable fields keep JsonNullable and must not be wrapped in Optional. + assertThat(output.resolve("src/main/java/org/openapitools/client/model/SimpleObject.java")).content() + .doesNotContain("public java.util.Optional getNullableObject() {"); + } + + @Test + public void testOptionalGettersForNullableFieldsOnlyDisabledByDefault() { + final Path output = newTempFolder(); + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName(JAVA_GENERATOR) + .setLibrary(JavaClientCodegen.RESTCLIENT) + .setInputSpec("src/test/resources/3_0/java/builder.yaml") + .setOutputDir(output.toString().replace("\\", "/")); + + List files = new DefaultGenerator().opts(configurator.toClientOptInput()).generate(); + + validateJavaSourceFiles(files); + + // Without the opt-in flag the getter keeps returning the raw type (backward compatible). + assertThat(output.resolve("src/main/java/org/openapitools/client/model/SimpleObject.java")).content() + .doesNotContain("return java.util.Optional.ofNullable(simple);"); + } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index 920b2f6129f8..1c0b0aa08e00 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -5372,6 +5372,55 @@ void testBuilderJavaSpring_useOptional() throws IOException { "SimpleObject.Builder nb(BigDecimal nb) {"); } + @Test + void testOptionalGettersForNullableFieldsOnly() throws IOException { + Map files = generateFromContract( + "src/test/resources/3_0/java/builder.yaml", + SPRING_BOOT, + Map.of( + SpringCodegen.OPENAPI_NULLABLE, true, + AbstractJavaCodegen.OPTIONAL_GETTERS_FOR_NULLABLE_FIELDS_ONLY, true, + INTERFACE_ONLY, "true" + ) + ); + + // Non-required, non-nullable fields: getter returns Optional, field and setter stay raw. + JavaFileAssert.assertThat(files.get("SimpleObject.java")) + .fileContains( + "public @Nullable java.util.Optional getSimple() {", + "return java.util.Optional.ofNullable(simple);", + "private @Nullable String simple;", + "public void setSimple(@Nullable String simple) {") + // The backing field and setter must remain the raw type, never Optional. + .fileDoesNotContain( + "private @Nullable java.util.Optional simple;", + "public void setSimple(java.util.Optional simple)"); + + // Nullable fields keep JsonNullable semantics and must NOT be wrapped in Optional. + JavaFileAssert.assertThat(files.get("SimpleObject.java")) + .fileContains("public JsonNullable getNullableObject() {") + .fileDoesNotContain("public java.util.Optional getNullableObject() {"); + } + + @Test + void testOptionalGettersForNullableFieldsOnlyDisabledByDefault() throws IOException { + Map files = generateFromContract( + "src/test/resources/3_0/java/builder.yaml", + SPRING_BOOT, + Map.of( + SpringCodegen.OPENAPI_NULLABLE, true, + INTERFACE_ONLY, "true" + ) + ); + + // Without the opt-in flag the getter must keep returning the raw type (backward compatible). + JavaFileAssert.assertThat(files.get("SimpleObject.java")) + .fileContains("getSimple()") + .fileDoesNotContain( + "public java.util.Optional getSimple() {", + "return java.util.Optional.ofNullable(simple);"); + } + @Test public void optionalListShouldBeEmpty() throws IOException { File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); From 16d08a319472fc8b195250599b1c6fc88990fcef Mon Sep 17 00:00:00 2001 From: Jorge Date: Tue, 16 Jun 2026 17:05:40 +0200 Subject: [PATCH 02/15] fix: update generated annotation version in EnumConverterConfiguration --- .../Java/libraries/restclient/pojo.mustache | 17 ++--------------- .../Java/libraries/resttemplate/pojo.mustache | 17 ++--------------- .../Java/libraries/webclient/pojo.mustache | 17 ++--------------- .../src/main/resources/Java/pojo.mustache | 17 ++--------------- .../src/main/resources/JavaSpring/pojo.mustache | 11 +---------- 5 files changed, 9 insertions(+), 70 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache index 6ee8e5d94e10..05a88c91dfa6 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache @@ -241,24 +241,11 @@ public {{>sealed}}class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#v {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDatatypeWithEnum}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { - {{#vendorExtensions.x-is-jackson-optional-nullable}} - {{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} + {{#vendorExtensions.x-is-jackson-optional-nullable}}{{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} if ({{name}} == null) { {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; } - {{/isReadOnly}} - return {{name}}.orElse(null); - {{/vendorExtensions.x-is-jackson-optional-nullable}} - {{^vendorExtensions.x-is-jackson-optional-nullable}} - {{#optionalGettersForNullableFieldsOnly}}{{^required}} - return java.util.Optional.ofNullable({{name}}); - {{/required}}{{#required}} - return {{name}}; - {{/required}}{{/optionalGettersForNullableFieldsOnly}} - {{^optionalGettersForNullableFieldsOnly}} - return {{name}}; - {{/optionalGettersForNullableFieldsOnly}} - {{/vendorExtensions.x-is-jackson-optional-nullable}} + {{/isReadOnly}}return {{name}}.orElse(null);{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}return {{#optionalGettersForNullableFieldsOnly}}{{^required}}java.util.Optional.ofNullable({{name}}){{/required}}{{#required}}{{name}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}{{name}}{{/optionalGettersForNullableFieldsOnly}};{{/vendorExtensions.x-is-jackson-optional-nullable}} } {{#vendorExtensions.x-is-jackson-optional-nullable}} diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache index 07bf4c2c9c48..115772976786 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache @@ -241,24 +241,11 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDatatypeWithEnum}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { - {{#vendorExtensions.x-is-jackson-optional-nullable}} - {{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} + {{#vendorExtensions.x-is-jackson-optional-nullable}}{{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} if ({{name}} == null) { {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; } - {{/isReadOnly}} - return {{name}}.orElse(null); - {{/vendorExtensions.x-is-jackson-optional-nullable}} - {{^vendorExtensions.x-is-jackson-optional-nullable}} - {{#optionalGettersForNullableFieldsOnly}}{{^required}} - return java.util.Optional.ofNullable({{name}}); - {{/required}}{{#required}} - return {{name}}; - {{/required}}{{/optionalGettersForNullableFieldsOnly}} - {{^optionalGettersForNullableFieldsOnly}} - return {{name}}; - {{/optionalGettersForNullableFieldsOnly}} - {{/vendorExtensions.x-is-jackson-optional-nullable}} + {{/isReadOnly}}return {{name}}.orElse(null);{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}return {{#optionalGettersForNullableFieldsOnly}}{{^required}}java.util.Optional.ofNullable({{name}}){{/required}}{{#required}}{{name}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}{{name}}{{/optionalGettersForNullableFieldsOnly}};{{/vendorExtensions.x-is-jackson-optional-nullable}} } {{#vendorExtensions.x-is-jackson-optional-nullable}} diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache index 10211fa9aded..f5f8e8d1f2d6 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache @@ -241,24 +241,11 @@ public {{>sealed}}class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#v {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDatatypeWithEnum}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { - {{#vendorExtensions.x-is-jackson-optional-nullable}} - {{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} + {{#vendorExtensions.x-is-jackson-optional-nullable}}{{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} if ({{name}} == null) { {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; } - {{/isReadOnly}} - return {{name}}.orElse(null); - {{/vendorExtensions.x-is-jackson-optional-nullable}} - {{^vendorExtensions.x-is-jackson-optional-nullable}} - {{#optionalGettersForNullableFieldsOnly}}{{^required}} - return java.util.Optional.ofNullable({{name}}); - {{/required}}{{#required}} - return {{name}}; - {{/required}}{{/optionalGettersForNullableFieldsOnly}} - {{^optionalGettersForNullableFieldsOnly}} - return {{name}}; - {{/optionalGettersForNullableFieldsOnly}} - {{/vendorExtensions.x-is-jackson-optional-nullable}} + {{/isReadOnly}}return {{name}}.orElse(null);{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}return {{#optionalGettersForNullableFieldsOnly}}{{^required}}java.util.Optional.ofNullable({{name}}){{/required}}{{#required}}{{name}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}{{name}}{{/optionalGettersForNullableFieldsOnly}};{{/vendorExtensions.x-is-jackson-optional-nullable}} } {{#vendorExtensions.x-is-jackson-optional-nullable}} diff --git a/modules/openapi-generator/src/main/resources/Java/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/pojo.mustache index aa536c540301..633fa56b24ec 100644 --- a/modules/openapi-generator/src/main/resources/Java/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/pojo.mustache @@ -244,24 +244,11 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{{datatypeWithEnum}}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { - {{#vendorExtensions.x-is-jackson-optional-nullable}} - {{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} + {{#vendorExtensions.x-is-jackson-optional-nullable}}{{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} if ({{name}} == null) { {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; } - {{/isReadOnly}} - return {{name}}.orElse(null); - {{/vendorExtensions.x-is-jackson-optional-nullable}} - {{^vendorExtensions.x-is-jackson-optional-nullable}} - {{#optionalGettersForNullableFieldsOnly}}{{^required}} - return java.util.Optional.ofNullable({{name}}); - {{/required}}{{#required}} - return {{name}}; - {{/required}}{{/optionalGettersForNullableFieldsOnly}} - {{^optionalGettersForNullableFieldsOnly}} - return {{name}}; - {{/optionalGettersForNullableFieldsOnly}} - {{/vendorExtensions.x-is-jackson-optional-nullable}} + {{/isReadOnly}}return {{name}}.orElse(null);{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}return {{#optionalGettersForNullableFieldsOnly}}{{^required}}java.util.Optional.ofNullable({{name}}){{/required}}{{#required}}{{name}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}{{name}}{{/optionalGettersForNullableFieldsOnly}};{{/vendorExtensions.x-is-jackson-optional-nullable}} } {{#vendorExtensions.x-is-jackson-optional-nullable}} diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache index 28ee12c3e24c..17ae34072af8 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache @@ -236,16 +236,7 @@ public {{>sealed}}class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}} @Deprecated {{/deprecated}} {{#jackson}}{{>jackson_annotations}}{{/jackson}}{{#withXml}}{{>xmlAccessorAnnotation}}{{/withXml}} public {{>nullableAnnotation}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isNullable}}java.util.Optional<{{/isNullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDataTypeBeanValidation}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isNullable}}>{{/isNullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { - {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isNullable}} - return java.util.Optional.ofNullable({{name}}); - {{/isNullable}}{{#isNullable}} - return {{name}}; - {{/isNullable}}{{/required}}{{#required}} - return {{name}}; - {{/required}}{{/optionalGettersForNullableFieldsOnly}} - {{^optionalGettersForNullableFieldsOnly}} - return {{name}}; - {{/optionalGettersForNullableFieldsOnly}} + {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isNullable}}return java.util.Optional.ofNullable({{name}});{{/isNullable}}{{#isNullable}}return {{name}};{{/isNullable}}{{/required}}{{#required}}return {{name}};{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}return {{name}};{{/optionalGettersForNullableFieldsOnly}} } {{/lombok.Getter}} From 8a9121b82e462e84f9f69158b4c14c2e4a4b57c0 Mon Sep 17 00:00:00 2001 From: Jorge Date: Tue, 16 Jun 2026 17:08:45 +0200 Subject: [PATCH 03/15] feat: add optional getters for nullable fields --- docs/generators/groovy.md | 1 + docs/generators/java-camel.md | 1 + docs/generators/java-dubbo.md | 1 + docs/generators/java-helidon-client.md | 1 + docs/generators/java-helidon-server.md | 1 + docs/generators/java-inflector.md | 1 + docs/generators/java-micronaut-client.md | 1 + docs/generators/java-micronaut-server.md | 1 + docs/generators/java-microprofile.md | 1 + docs/generators/java-msf4j.md | 1 + docs/generators/java-pkmst.md | 1 + docs/generators/java-play-framework.md | 1 + docs/generators/java-undertow-server.md | 1 + docs/generators/java-vertx-web.md | 1 + docs/generators/java-vertx.md | 1 + docs/generators/java-wiremock.md | 1 + docs/generators/java.md | 1 + docs/generators/jaxrs-cxf-cdi.md | 1 + docs/generators/jaxrs-cxf-client.md | 1 + docs/generators/jaxrs-cxf-extended.md | 1 + docs/generators/jaxrs-cxf.md | 1 + docs/generators/jaxrs-jersey.md | 1 + docs/generators/jaxrs-resteasy-eap.md | 1 + docs/generators/jaxrs-resteasy.md | 1 + docs/generators/jaxrs-spec.md | 1 + docs/generators/spring.md | 1 + 26 files changed, 26 insertions(+) diff --git a/docs/generators/groovy.md b/docs/generators/groovy.md index a7125c0350b4..fb5c44f66cc9 100644 --- a/docs/generators/groovy.md +++ b/docs/generators/groovy.md @@ -55,6 +55,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-camel.md b/docs/generators/java-camel.md index bfec99c38003..dc8c2a8a50ce 100644 --- a/docs/generators/java-camel.md +++ b/docs/generators/java-camel.md @@ -83,6 +83,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |optionalAcceptNullable|Use `ofNullable` instead of just `of` to accept null values when using Optional.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-dubbo.md b/docs/generators/java-dubbo.md index d39495d8a2e0..2a5405590e6d 100644 --- a/docs/generators/java-dubbo.md +++ b/docs/generators/java-dubbo.md @@ -62,6 +62,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-helidon-client.md b/docs/generators/java-helidon-client.md index cab0e57ada6f..5921d8dd112c 100644 --- a/docs/generators/java-helidon-client.md +++ b/docs/generators/java-helidon-client.md @@ -56,6 +56,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.client.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |rootJavaEEPackage|Root package name for Java EE| |Helidon 2.x and earlier: javax; Helidon 3.x and later: jakarta| |serializableModel|boolean - toggle "implements Serializable" for generated models| |false| diff --git a/docs/generators/java-helidon-server.md b/docs/generators/java-helidon-server.md index e817d1e1e2b3..0c595dd117ed 100644 --- a/docs/generators/java-helidon-server.md +++ b/docs/generators/java-helidon-server.md @@ -56,6 +56,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.server.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |performBeanValidation|Perform BeanValidation| |false| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |rootJavaEEPackage|Root package name for Java EE| |Helidon 2.x and earlier: javax; Helidon 3.x and later: jakarta| diff --git a/docs/generators/java-inflector.md b/docs/generators/java-inflector.md index 3cc8851281ed..71f86c54742b 100644 --- a/docs/generators/java-inflector.md +++ b/docs/generators/java-inflector.md @@ -57,6 +57,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-micronaut-client.md b/docs/generators/java-micronaut-client.md index 5b0fcc3ab460..d27834cb2d1b 100644 --- a/docs/generators/java-micronaut-client.md +++ b/docs/generators/java-micronaut-client.md @@ -69,6 +69,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |micronautVersion|Micronaut version, only >=3.0.0 versions are supported| |3.4.3| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-micronaut-server.md b/docs/generators/java-micronaut-server.md index eb6e68a82e57..2d35a52ad03b 100644 --- a/docs/generators/java-micronaut-server.md +++ b/docs/generators/java-micronaut-server.md @@ -67,6 +67,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |micronautVersion|Micronaut version, only >=3.0.0 versions are supported| |3.4.3| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-microprofile.md b/docs/generators/java-microprofile.md index f6a93340b5b0..36901a988d85 100644 --- a/docs/generators/java-microprofile.md +++ b/docs/generators/java-microprofile.md @@ -74,6 +74,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |microprofileRestClientVersion|Version of MicroProfile Rest Client API.| |null| |modelPackage|package for generated models| |org.openapitools.client.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parcelableModel|Whether to generate models for Android that implement Parcelable with the okhttp-gson library.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-msf4j.md b/docs/generators/java-msf4j.md index b806ca5901a3..ea486b97bc2b 100644 --- a/docs/generators/java-msf4j.md +++ b/docs/generators/java-msf4j.md @@ -59,6 +59,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-pkmst.md b/docs/generators/java-pkmst.md index dbc4a66daef9..e445748737d5 100644 --- a/docs/generators/java-pkmst.md +++ b/docs/generators/java-pkmst.md @@ -59,6 +59,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |com.prokarma.pkmst.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-play-framework.md b/docs/generators/java-play-framework.md index 0eb293d1f84b..68fcf67a5e1d 100644 --- a/docs/generators/java-play-framework.md +++ b/docs/generators/java-play-framework.md @@ -61,6 +61,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |apimodels| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-undertow-server.md b/docs/generators/java-undertow-server.md index 3e41d2e24485..1ea4fe3b65a0 100644 --- a/docs/generators/java-undertow-server.md +++ b/docs/generators/java-undertow-server.md @@ -57,6 +57,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |null| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-vertx-web.md b/docs/generators/java-vertx-web.md index 2530cd52bdf9..8e3cecdd058c 100644 --- a/docs/generators/java-vertx-web.md +++ b/docs/generators/java-vertx-web.md @@ -57,6 +57,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.vertxweb.server.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-vertx.md b/docs/generators/java-vertx.md index cb91eeb2c753..a71368c12eaf 100644 --- a/docs/generators/java-vertx.md +++ b/docs/generators/java-vertx.md @@ -57,6 +57,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.server.api.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-wiremock.md b/docs/generators/java-wiremock.md index c9ae878a03f5..85059304eb4e 100644 --- a/docs/generators/java-wiremock.md +++ b/docs/generators/java-wiremock.md @@ -57,6 +57,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |null| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java.md b/docs/generators/java.md index 780b1aca9bf6..23d5b8f04f68 100644 --- a/docs/generators/java.md +++ b/docs/generators/java.md @@ -74,6 +74,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |microprofileRestClientVersion|Version of MicroProfile Rest Client API.| |null| |modelPackage|package for generated models| |org.openapitools.client.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parcelableModel|Whether to generate models for Android that implement Parcelable with the okhttp-gson library.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-cxf-cdi.md b/docs/generators/jaxrs-cxf-cdi.md index 54e88fd00a53..45495f49a74c 100644 --- a/docs/generators/jaxrs-cxf-cdi.md +++ b/docs/generators/jaxrs-cxf-cdi.md @@ -62,6 +62,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |openApiSpecFileLocation|Location where the file containing the spec will be generated in the output folder. No file generated when set to null or empty string.| |null| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-cxf-client.md b/docs/generators/jaxrs-cxf-client.md index a3835496fda8..40ea142e8267 100644 --- a/docs/generators/jaxrs-cxf-client.md +++ b/docs/generators/jaxrs-cxf-client.md @@ -59,6 +59,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-cxf-extended.md b/docs/generators/jaxrs-cxf-extended.md index e8575723b309..cc02fe09be36 100644 --- a/docs/generators/jaxrs-cxf-extended.md +++ b/docs/generators/jaxrs-cxf-extended.md @@ -67,6 +67,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |loadTestDataFromFile|Load test data from a generated JSON file| |false| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-cxf.md b/docs/generators/jaxrs-cxf.md index c54b42ab061c..204d64c0f0bc 100644 --- a/docs/generators/jaxrs-cxf.md +++ b/docs/generators/jaxrs-cxf.md @@ -65,6 +65,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-jersey.md b/docs/generators/jaxrs-jersey.md index b464219f0e82..8f7d188e2b7e 100644 --- a/docs/generators/jaxrs-jersey.md +++ b/docs/generators/jaxrs-jersey.md @@ -59,6 +59,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-resteasy-eap.md b/docs/generators/jaxrs-resteasy-eap.md index 4bbee723e5a9..7c3f7dfedbd1 100644 --- a/docs/generators/jaxrs-resteasy-eap.md +++ b/docs/generators/jaxrs-resteasy-eap.md @@ -59,6 +59,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-resteasy.md b/docs/generators/jaxrs-resteasy.md index d61e43bedc21..821291209df7 100644 --- a/docs/generators/jaxrs-resteasy.md +++ b/docs/generators/jaxrs-resteasy.md @@ -59,6 +59,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-spec.md b/docs/generators/jaxrs-spec.md index b5225bffd43e..35583a0584f2 100644 --- a/docs/generators/jaxrs-spec.md +++ b/docs/generators/jaxrs-spec.md @@ -63,6 +63,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |openApiSpecFileLocation|Location where the file containing the spec will be generated in the output folder. No file generated when set to null or empty string.| |null| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/spring.md b/docs/generators/spring.md index 1a444e6ef6a6..56a43355f82a 100644 --- a/docs/generators/spring.md +++ b/docs/generators/spring.md @@ -76,6 +76,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |optionalAcceptNullable|Use `ofNullable` instead of just `of` to accept null values when using Optional.| |true| +|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| From 5e85ed26682c21c831bafa107e38ffa3e4bba942 Mon Sep 17 00:00:00 2001 From: Jorge Date: Tue, 16 Jun 2026 17:09:32 +0200 Subject: [PATCH 04/15] style: fix indentation in nullable getters --- .../client/model/DefaultValue.java | 6 +++--- .../client/model/DefaultValue.java | 6 +++--- .../client/model/DefaultValue.java | 6 +++--- .../client/model/DefaultValue.java | 6 +++--- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../client/model/ByteArrayObject.java | 4 ++-- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../client/model/ByteArrayObject.java | 4 ++-- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +++++++++---------- .../client/model/ParentWithNullable.java | 2 +- 74 files changed, 237 insertions(+), 237 deletions(-) diff --git a/samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/DefaultValue.java b/samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/DefaultValue.java index 0f1119a5512b..a096e297edb3 100644 --- a/samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/DefaultValue.java +++ b/samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/DefaultValue.java @@ -312,7 +312,7 @@ public DefaultValue addArrayStringNullableItem(String arrayStringNullableItem) { @JsonIgnore public List getArrayStringNullable() { - return arrayStringNullable.orElse(null); + return arrayStringNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_STRING_NULLABLE, required = false) @@ -357,7 +357,7 @@ public DefaultValue addArrayStringExtensionNullableItem(String arrayStringExtens @JsonIgnore public List getArrayStringExtensionNullable() { - return arrayStringExtensionNullable.orElse(null); + return arrayStringExtensionNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_STRING_EXTENSION_NULLABLE, required = false) @@ -390,7 +390,7 @@ public DefaultValue stringNullable(@javax.annotation.Nullable String stringNulla @JsonIgnore public String getStringNullable() { - return stringNullable.orElse(null); + return stringNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_NULLABLE, required = false) diff --git a/samples/client/echo_api/java/restclient/src/main/java/org/openapitools/client/model/DefaultValue.java b/samples/client/echo_api/java/restclient/src/main/java/org/openapitools/client/model/DefaultValue.java index c518695bd6e4..882ae4d6544c 100644 --- a/samples/client/echo_api/java/restclient/src/main/java/org/openapitools/client/model/DefaultValue.java +++ b/samples/client/echo_api/java/restclient/src/main/java/org/openapitools/client/model/DefaultValue.java @@ -310,7 +310,7 @@ public DefaultValue addArrayStringNullableItem(String arrayStringNullableItem) { @JsonIgnore public List getArrayStringNullable() { - return arrayStringNullable.orElse(null); + return arrayStringNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_STRING_NULLABLE, required = false) @@ -355,7 +355,7 @@ public DefaultValue addArrayStringExtensionNullableItem(String arrayStringExtens @JsonIgnore public List getArrayStringExtensionNullable() { - return arrayStringExtensionNullable.orElse(null); + return arrayStringExtensionNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_STRING_EXTENSION_NULLABLE, required = false) @@ -388,7 +388,7 @@ public DefaultValue stringNullable(@jakarta.annotation.Nullable String stringNul @JsonIgnore public String getStringNullable() { - return stringNullable.orElse(null); + return stringNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_NULLABLE, required = false) diff --git a/samples/client/echo_api/java/resteasy/src/main/java/org/openapitools/client/model/DefaultValue.java b/samples/client/echo_api/java/resteasy/src/main/java/org/openapitools/client/model/DefaultValue.java index 4265ebf329ac..5d70e623d3d5 100644 --- a/samples/client/echo_api/java/resteasy/src/main/java/org/openapitools/client/model/DefaultValue.java +++ b/samples/client/echo_api/java/resteasy/src/main/java/org/openapitools/client/model/DefaultValue.java @@ -309,7 +309,7 @@ public DefaultValue addArrayStringNullableItem(String arrayStringNullableItem) { @JsonIgnore public List getArrayStringNullable() { - return arrayStringNullable.orElse(null); + return arrayStringNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_STRING_NULLABLE, required = false) @@ -354,7 +354,7 @@ public DefaultValue addArrayStringExtensionNullableItem(String arrayStringExtens @JsonIgnore public List getArrayStringExtensionNullable() { - return arrayStringExtensionNullable.orElse(null); + return arrayStringExtensionNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_STRING_EXTENSION_NULLABLE, required = false) @@ -387,7 +387,7 @@ public DefaultValue stringNullable(@javax.annotation.Nullable String stringNulla @JsonIgnore public String getStringNullable() { - return stringNullable.orElse(null); + return stringNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_NULLABLE, required = false) diff --git a/samples/client/echo_api/java/resttemplate/src/main/java/org/openapitools/client/model/DefaultValue.java b/samples/client/echo_api/java/resttemplate/src/main/java/org/openapitools/client/model/DefaultValue.java index 20000cf39f75..5e87d79af85e 100644 --- a/samples/client/echo_api/java/resttemplate/src/main/java/org/openapitools/client/model/DefaultValue.java +++ b/samples/client/echo_api/java/resttemplate/src/main/java/org/openapitools/client/model/DefaultValue.java @@ -310,7 +310,7 @@ public DefaultValue addArrayStringNullableItem(String arrayStringNullableItem) { @JsonIgnore public List getArrayStringNullable() { - return arrayStringNullable.orElse(null); + return arrayStringNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_STRING_NULLABLE, required = false) @@ -355,7 +355,7 @@ public DefaultValue addArrayStringExtensionNullableItem(String arrayStringExtens @JsonIgnore public List getArrayStringExtensionNullable() { - return arrayStringExtensionNullable.orElse(null); + return arrayStringExtensionNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_STRING_EXTENSION_NULLABLE, required = false) @@ -388,7 +388,7 @@ public DefaultValue stringNullable(@javax.annotation.Nullable String stringNulla @JsonIgnore public String getStringNullable() { - return stringNullable.orElse(null); + return stringNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_NULLABLE, required = false) diff --git a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/EnumTest.java index feee38e80eaa..2c9799716e90 100644 --- a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/EnumTest.java @@ -343,7 +343,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/HealthCheckResult.java index cf2d8ef985d0..b751dc605598 100644 --- a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -58,7 +58,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/NullableClass.java index 9d9731bc2650..b520caba0de6 100644 --- a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/NullableClass.java @@ -128,7 +128,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -161,7 +161,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -194,7 +194,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -227,7 +227,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -260,7 +260,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -293,7 +293,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -338,7 +338,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -383,7 +383,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -461,7 +461,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -506,7 +506,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/ParentWithNullable.java index 9e7335df5670..b60137be8529 100644 --- a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -133,7 +133,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/EnumTest.java index feee38e80eaa..2c9799716e90 100644 --- a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/EnumTest.java @@ -343,7 +343,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java index 7fca839a748d..9268e332576f 100644 --- a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -59,7 +59,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/NullableClass.java index 70d54258ee41..c0d17e48e6d2 100644 --- a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/NullableClass.java @@ -129,7 +129,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -162,7 +162,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -195,7 +195,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -228,7 +228,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -261,7 +261,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -294,7 +294,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -339,7 +339,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -384,7 +384,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -462,7 +462,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -507,7 +507,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java index 6765ec83c9f8..385143186ea5 100644 --- a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -134,7 +134,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/restclient-nullable-arrays/src/main/java/org/openapitools/client/model/ByteArrayObject.java b/samples/client/petstore/java/restclient-nullable-arrays/src/main/java/org/openapitools/client/model/ByteArrayObject.java index abc91dfb18b1..caddb9863d6d 100644 --- a/samples/client/petstore/java/restclient-nullable-arrays/src/main/java/org/openapitools/client/model/ByteArrayObject.java +++ b/samples/client/petstore/java/restclient-nullable-arrays/src/main/java/org/openapitools/client/model/ByteArrayObject.java @@ -78,7 +78,7 @@ public ByteArrayObject nullableArray(@jakarta.annotation.Nullable byte[] nullabl @JsonIgnore public byte[] getNullableArray() { - return nullableArray.orElse(null); + return nullableArray.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_ARRAY, required = false) @@ -136,7 +136,7 @@ public ByteArrayObject nullableString(@jakarta.annotation.Nullable String nullab @JsonIgnore public String getNullableString() { - return nullableString.orElse(null); + return nullableString.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_STRING, required = false) diff --git a/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/EnumTest.java index 846a03b586d1..7ca1285b0f4d 100644 --- a/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/EnumTest.java @@ -347,7 +347,7 @@ public EnumTest outerEnum(@jakarta.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/HealthCheckResult.java index 622d4e31ce29..f76eda8e840a 100644 --- a/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -60,7 +60,7 @@ public HealthCheckResult nullableMessage(@jakarta.annotation.Nullable String nul @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/NullableClass.java index c60b6d85edf0..6e2bb6a2ca79 100644 --- a/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/NullableClass.java @@ -126,7 +126,7 @@ public NullableClass integerProp(@jakarta.annotation.Nullable Integer integerPro @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -160,7 +160,7 @@ public NullableClass numberProp(@jakarta.annotation.Nullable BigDecimal numberPr @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -194,7 +194,7 @@ public NullableClass booleanProp(@jakarta.annotation.Nullable Boolean booleanPro @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -228,7 +228,7 @@ public NullableClass stringProp(@jakarta.annotation.Nullable String stringProp) @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -262,7 +262,7 @@ public NullableClass dateProp(@jakarta.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -296,7 +296,7 @@ public NullableClass datetimeProp(@jakarta.annotation.Nullable OffsetDateTime da @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -342,7 +342,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -388,7 +388,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -468,7 +468,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -514,7 +514,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/ParentWithNullable.java index 9c07f37243e5..89b52b5e37d9 100644 --- a/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/restclient-swagger2/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -135,7 +135,7 @@ public ParentWithNullable nullableProperty(@jakarta.annotation.Nullable String n @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/EnumTest.java index dc17a5246d97..018f3f4fe243 100644 --- a/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/EnumTest.java @@ -341,7 +341,7 @@ public EnumTest outerEnum(@jakarta.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/HealthCheckResult.java index 3c8de21f6a61..277190f79d1d 100644 --- a/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -57,7 +57,7 @@ public HealthCheckResult nullableMessage(@jakarta.annotation.Nullable String nul @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/NullableClass.java index 9c24bd46df8d..1d826d60eba7 100644 --- a/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/NullableClass.java @@ -124,7 +124,7 @@ public NullableClass integerProp(@jakarta.annotation.Nullable Integer integerPro @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -157,7 +157,7 @@ public NullableClass numberProp(@jakarta.annotation.Nullable BigDecimal numberPr @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -190,7 +190,7 @@ public NullableClass booleanProp(@jakarta.annotation.Nullable Boolean booleanPro @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -223,7 +223,7 @@ public NullableClass stringProp(@jakarta.annotation.Nullable String stringProp) @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -256,7 +256,7 @@ public NullableClass dateProp(@jakarta.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -289,7 +289,7 @@ public NullableClass datetimeProp(@jakarta.annotation.Nullable OffsetDateTime da @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -334,7 +334,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -379,7 +379,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -457,7 +457,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -502,7 +502,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/ParentWithNullable.java index ade1009cf092..578ef5547068 100644 --- a/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/restclient-useSingleRequestParameter-static/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -132,7 +132,7 @@ public ParentWithNullable nullableProperty(@jakarta.annotation.Nullable String n @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/EnumTest.java index dc17a5246d97..018f3f4fe243 100644 --- a/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/EnumTest.java @@ -341,7 +341,7 @@ public EnumTest outerEnum(@jakarta.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/HealthCheckResult.java index 3c8de21f6a61..277190f79d1d 100644 --- a/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -57,7 +57,7 @@ public HealthCheckResult nullableMessage(@jakarta.annotation.Nullable String nul @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/NullableClass.java index 9c24bd46df8d..1d826d60eba7 100644 --- a/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/NullableClass.java @@ -124,7 +124,7 @@ public NullableClass integerProp(@jakarta.annotation.Nullable Integer integerPro @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -157,7 +157,7 @@ public NullableClass numberProp(@jakarta.annotation.Nullable BigDecimal numberPr @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -190,7 +190,7 @@ public NullableClass booleanProp(@jakarta.annotation.Nullable Boolean booleanPro @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -223,7 +223,7 @@ public NullableClass stringProp(@jakarta.annotation.Nullable String stringProp) @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -256,7 +256,7 @@ public NullableClass dateProp(@jakarta.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -289,7 +289,7 @@ public NullableClass datetimeProp(@jakarta.annotation.Nullable OffsetDateTime da @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -334,7 +334,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -379,7 +379,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -457,7 +457,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -502,7 +502,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/ParentWithNullable.java index ade1009cf092..578ef5547068 100644 --- a/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/restclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -132,7 +132,7 @@ public ParentWithNullable nullableProperty(@jakarta.annotation.Nullable String n @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/EnumTest.java index dc17a5246d97..018f3f4fe243 100644 --- a/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/EnumTest.java @@ -341,7 +341,7 @@ public EnumTest outerEnum(@jakarta.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java index 3c8de21f6a61..277190f79d1d 100644 --- a/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -57,7 +57,7 @@ public HealthCheckResult nullableMessage(@jakarta.annotation.Nullable String nul @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/NullableClass.java index 1d56929c6136..e5e38341248a 100644 --- a/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/NullableClass.java @@ -124,7 +124,7 @@ public NullableClass integerProp(@jakarta.annotation.Nullable Integer integerPro @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -157,7 +157,7 @@ public NullableClass numberProp(@jakarta.annotation.Nullable BigDecimal numberPr @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -190,7 +190,7 @@ public NullableClass booleanProp(@jakarta.annotation.Nullable Boolean booleanPro @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -223,7 +223,7 @@ public NullableClass stringProp(@jakarta.annotation.Nullable String stringProp) @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -256,7 +256,7 @@ public NullableClass dateProp(@jakarta.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -289,7 +289,7 @@ public NullableClass datetimeProp(@jakarta.annotation.Nullable OffsetDateTime da @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -334,7 +334,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -379,7 +379,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -457,7 +457,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -502,7 +502,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java index ade1009cf092..578ef5547068 100644 --- a/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/restclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -132,7 +132,7 @@ public ParentWithNullable nullableProperty(@jakarta.annotation.Nullable String n @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/EnumTest.java index 63be5f4d8d74..05f141a55f26 100644 --- a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/HealthCheckResult.java index a38b91d108aa..ef033ab05fc7 100644 --- a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/NullableClass.java index 5056076300cb..b55b00c8de99 100644 --- a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/NullableClass.java @@ -126,7 +126,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -159,7 +159,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -192,7 +192,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -225,7 +225,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -258,7 +258,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -291,7 +291,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -336,7 +336,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -381,7 +381,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -459,7 +459,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -504,7 +504,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/ParentWithNullable.java index c2ce75a43f62..d05630d2c3bf 100644 --- a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/EnumTest.java index 985a1e2d28b6..93e3a6a07481 100644 --- a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/EnumTest.java @@ -382,7 +382,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/HealthCheckResult.java index ff629b9c9cea..859ec2e85fb3 100644 --- a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -65,7 +65,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/NullableClass.java index 87e14ba8cf3d..070c5216da21 100644 --- a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/NullableClass.java @@ -144,7 +144,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -178,7 +178,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -212,7 +212,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -246,7 +246,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -280,7 +280,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -314,7 +314,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -360,7 +360,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -407,7 +407,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -491,7 +491,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -538,7 +538,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/ParentWithNullable.java index a5f134f13989..597a04e3dae1 100644 --- a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -146,7 +146,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/EnumTest.java index ae1557349f84..e0233d0d9b07 100644 --- a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/EnumTest.java @@ -355,7 +355,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/HealthCheckResult.java index 1c6dcfe7011b..37adda120e9b 100644 --- a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -64,7 +64,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/NullableClass.java index 959d31dde6ca..0082d64785de 100644 --- a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/NullableClass.java @@ -142,7 +142,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -175,7 +175,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -208,7 +208,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -241,7 +241,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -274,7 +274,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -307,7 +307,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -352,7 +352,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -397,7 +397,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -475,7 +475,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -520,7 +520,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/ParentWithNullable.java index 9249f975731b..f4175519cd1e 100644 --- a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -140,7 +140,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java index 63be5f4d8d74..05f141a55f26 100644 --- a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java index a38b91d108aa..ef033ab05fc7 100644 --- a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java index 5056076300cb..b55b00c8de99 100644 --- a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java @@ -126,7 +126,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -159,7 +159,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -192,7 +192,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -225,7 +225,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -258,7 +258,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -291,7 +291,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -336,7 +336,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -381,7 +381,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -459,7 +459,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -504,7 +504,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java index c2ce75a43f62..d05630d2c3bf 100644 --- a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/EnumTest.java index 63be5f4d8d74..05f141a55f26 100644 --- a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/HealthCheckResult.java index a38b91d108aa..ef033ab05fc7 100644 --- a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/NullableClass.java index 5056076300cb..b55b00c8de99 100644 --- a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/NullableClass.java @@ -126,7 +126,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -159,7 +159,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -192,7 +192,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -225,7 +225,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -258,7 +258,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -291,7 +291,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -336,7 +336,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -381,7 +381,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -459,7 +459,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -504,7 +504,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/ParentWithNullable.java index c2ce75a43f62..d05630d2c3bf 100644 --- a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java index 63be5f4d8d74..05f141a55f26 100644 --- a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java index a38b91d108aa..ef033ab05fc7 100644 --- a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java index 5056076300cb..b55b00c8de99 100644 --- a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java @@ -126,7 +126,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -159,7 +159,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -192,7 +192,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -225,7 +225,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -258,7 +258,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -291,7 +291,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -336,7 +336,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -381,7 +381,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -459,7 +459,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -504,7 +504,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java index c2ce75a43f62..d05630d2c3bf 100644 --- a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/EnumTest.java index 63be5f4d8d74..05f141a55f26 100644 --- a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/HealthCheckResult.java index a38b91d108aa..ef033ab05fc7 100644 --- a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/NullableClass.java index 5056076300cb..b55b00c8de99 100644 --- a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/NullableClass.java @@ -126,7 +126,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -159,7 +159,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -192,7 +192,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -225,7 +225,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -258,7 +258,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -291,7 +291,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -336,7 +336,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -381,7 +381,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -459,7 +459,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -504,7 +504,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/ParentWithNullable.java index c2ce75a43f62..d05630d2c3bf 100644 --- a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/EnumTest.java index d8efc8a57c3a..49ad24247991 100644 --- a/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@jakarta.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/HealthCheckResult.java index 77d279f65c75..1eb7876c4e13 100644 --- a/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@jakarta.annotation.Nullable String nul @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/NullableClass.java index cf116f091eea..9d6b6862f2db 100644 --- a/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/NullableClass.java @@ -123,7 +123,7 @@ public NullableClass integerProp(@jakarta.annotation.Nullable Integer integerPro @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -156,7 +156,7 @@ public NullableClass numberProp(@jakarta.annotation.Nullable BigDecimal numberPr @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -189,7 +189,7 @@ public NullableClass booleanProp(@jakarta.annotation.Nullable Boolean booleanPro @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -222,7 +222,7 @@ public NullableClass stringProp(@jakarta.annotation.Nullable String stringProp) @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -255,7 +255,7 @@ public NullableClass dateProp(@jakarta.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -288,7 +288,7 @@ public NullableClass datetimeProp(@jakarta.annotation.Nullable OffsetDateTime da @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -333,7 +333,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -378,7 +378,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -456,7 +456,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -501,7 +501,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/ParentWithNullable.java index 3f03fb4c6c60..7d88184de656 100644 --- a/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/webclient-jakarta/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@jakarta.annotation.Nullable String n @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/webclient-nullable-arrays/src/main/java/org/openapitools/client/model/ByteArrayObject.java b/samples/client/petstore/java/webclient-nullable-arrays/src/main/java/org/openapitools/client/model/ByteArrayObject.java index e14d56e2f00d..7b64ba7a4779 100644 --- a/samples/client/petstore/java/webclient-nullable-arrays/src/main/java/org/openapitools/client/model/ByteArrayObject.java +++ b/samples/client/petstore/java/webclient-nullable-arrays/src/main/java/org/openapitools/client/model/ByteArrayObject.java @@ -77,7 +77,7 @@ public ByteArrayObject nullableArray(@javax.annotation.Nullable byte[] nullableA @JsonIgnore public byte[] getNullableArray() { - return nullableArray.orElse(null); + return nullableArray.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_ARRAY, required = false) @@ -135,7 +135,7 @@ public ByteArrayObject nullableString(@javax.annotation.Nullable String nullable @JsonIgnore public String getNullableString() { - return nullableString.orElse(null); + return nullableString.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_STRING, required = false) diff --git a/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/EnumTest.java index 9dd56e0842b5..155fbfbf7c1a 100644 --- a/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/EnumTest.java @@ -346,7 +346,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/HealthCheckResult.java index 53633822939a..3cddb6e8f036 100644 --- a/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -59,7 +59,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/NullableClass.java index 24028b6cea72..39b49c2c309a 100644 --- a/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/NullableClass.java @@ -125,7 +125,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -159,7 +159,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -193,7 +193,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -227,7 +227,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -261,7 +261,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -295,7 +295,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -341,7 +341,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -387,7 +387,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -467,7 +467,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -513,7 +513,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/ParentWithNullable.java index 75cc4cdde052..0668f7e83958 100644 --- a/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/webclient-swagger2/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -134,7 +134,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/EnumTest.java index 2ac2d67add0f..53077b91dcd5 100644 --- a/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/HealthCheckResult.java index 65df9b9f8d21..49a96b82e6b4 100644 --- a/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/NullableClass.java index c03c48cc18c6..21b0c4461b60 100644 --- a/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/NullableClass.java @@ -123,7 +123,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -156,7 +156,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -189,7 +189,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -222,7 +222,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -255,7 +255,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -288,7 +288,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -333,7 +333,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -378,7 +378,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -456,7 +456,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -501,7 +501,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/ParentWithNullable.java index aeaf2fee2294..839f078dcc90 100644 --- a/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/webclient-useSingleRequestParameter/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/EnumTest.java index 2ac2d67add0f..53077b91dcd5 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java index 65df9b9f8d21..49a96b82e6b4 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/NullableClass.java index 88bc36b06131..3ec744041229 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/NullableClass.java @@ -123,7 +123,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -156,7 +156,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -189,7 +189,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -222,7 +222,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -255,7 +255,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -288,7 +288,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -333,7 +333,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -378,7 +378,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -456,7 +456,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -501,7 +501,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java index aeaf2fee2294..839f078dcc90 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) From 7a253295d8abd28abd05c09304ebb7fc206d829d Mon Sep 17 00:00:00 2001 From: Jorge Date: Tue, 16 Jun 2026 17:27:19 +0200 Subject: [PATCH 05/15] feat: add configuration files for optional getters in Java clients --- .tool-versions | 1 + ...t4-jackson3-jspecify-optional-getters.yaml | 18 +++++++++++++++ ...t4-jackson3-jspecify-optional-getters.yaml | 19 ++++++++++++++++ ...t4-jackson3-jspecify-optional-getters.yaml | 18 +++++++++++++++ ...ring-boot-4-jspecify-optional-getters.yaml | 22 +++++++++++++++++++ 5 files changed, 78 insertions(+) create mode 100644 .tool-versions create mode 100644 bin/configs/java-restclient-springBoot4-jackson3-jspecify-optional-getters.yaml create mode 100644 bin/configs/java-resttemplate-springBoot4-jackson3-jspecify-optional-getters.yaml create mode 100644 bin/configs/java-webclient-springBoot4-jackson3-jspecify-optional-getters.yaml create mode 100644 bin/configs/spring-boot-4-jspecify-optional-getters.yaml diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 000000000000..0dc059dd6157 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +ivm-java openjdk-21.0.8 diff --git a/bin/configs/java-restclient-springBoot4-jackson3-jspecify-optional-getters.yaml b/bin/configs/java-restclient-springBoot4-jackson3-jspecify-optional-getters.yaml new file mode 100644 index 000000000000..04a04d3a71a7 --- /dev/null +++ b/bin/configs/java-restclient-springBoot4-jackson3-jspecify-optional-getters.yaml @@ -0,0 +1,18 @@ +generatorName: java +outputDir: samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters +library: restclient +inputSpec: modules/openapi-generator/src/test/resources/3_0/java/jspecify.yaml +templateDir: modules/openapi-generator/src/main/resources/Java +validateSpec: false +additionalProperties: + artifactId: petstore-restclient-optional-getters + hideGenerationTimestamp: "true" + containerDefaultToNull: "true" + useSpringBoot4: true + useJackson3: true + openApiNullable: false + useJspecify: true + optionalGettersForNullableFieldsOnly: "true" +typeMappings: + OffsetDateTime: java.time.Instant + BigDecimal: java.math.BigDecimal diff --git a/bin/configs/java-resttemplate-springBoot4-jackson3-jspecify-optional-getters.yaml b/bin/configs/java-resttemplate-springBoot4-jackson3-jspecify-optional-getters.yaml new file mode 100644 index 000000000000..cb50837c3b7e --- /dev/null +++ b/bin/configs/java-resttemplate-springBoot4-jackson3-jspecify-optional-getters.yaml @@ -0,0 +1,19 @@ +generatorName: java +outputDir: samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters +library: resttemplate +inputSpec: modules/openapi-generator/src/test/resources/3_0/java/jspecify.yaml +templateDir: modules/openapi-generator/src/main/resources/Java +validateSpec: false +additionalProperties: + artifactId: petstore-resttemplate-optional-getters + hideGenerationTimestamp: "true" + containerDefaultToNull: "true" + useJakartaEe: true + useSpringBoot4: true + useJackson3: true + openApiNullable: false + useJspecify: true + optionalGettersForNullableFieldsOnly: "true" +typeMappings: + OffsetDateTime: java.time.Instant + BigDecimal: java.math.BigDecimal diff --git a/bin/configs/java-webclient-springBoot4-jackson3-jspecify-optional-getters.yaml b/bin/configs/java-webclient-springBoot4-jackson3-jspecify-optional-getters.yaml new file mode 100644 index 000000000000..b7fdae68869e --- /dev/null +++ b/bin/configs/java-webclient-springBoot4-jackson3-jspecify-optional-getters.yaml @@ -0,0 +1,18 @@ +generatorName: java +outputDir: samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters +library: webclient +inputSpec: modules/openapi-generator/src/test/resources/3_0/java/jspecify.yaml +templateDir: modules/openapi-generator/src/main/resources/Java +validateSpec: false +additionalProperties: + artifactId: petstore-webclient-optional-getters + hideGenerationTimestamp: "true" + containerDefaultToNull: "true" + useSpringBoot4: true + useJackson3: true + openApiNullable: false + useJspecify: true + optionalGettersForNullableFieldsOnly: "true" +typeMappings: + OffsetDateTime: java.time.Instant + BigDecimal: java.math.BigDecimal diff --git a/bin/configs/spring-boot-4-jspecify-optional-getters.yaml b/bin/configs/spring-boot-4-jspecify-optional-getters.yaml new file mode 100644 index 000000000000..5e8b46e1c9f8 --- /dev/null +++ b/bin/configs/spring-boot-4-jspecify-optional-getters.yaml @@ -0,0 +1,22 @@ +generatorName: spring +library: spring-boot +outputDir: samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters +inputSpec: modules/openapi-generator/src/test/resources/3_0/java/jspecify.yaml +templateDir: modules/openapi-generator/src/main/resources/JavaSpring +validateSpec: false +additionalProperties: + groupId: org.openapitools.openapi3 + documentationProvider: springdoc + interfaceOnly: true + artifactId: springboot-optional-getters + snapshotVersion: "true" + useSpringBoot4: true + useJackson3: true + useBeanValidation: true + withXml: true + hideGenerationTimestamp: "true" + generateConstructorWithAllArgs: true + generateBuilders: true + openApiNullable: false + useJspecify: true + optionalGettersForNullableFieldsOnly: "true" From f1c6dde6813f9fd860222912f6b9c49eb5cad96d Mon Sep 17 00:00:00 2001 From: Jorge Date: Tue, 16 Jun 2026 17:33:34 +0200 Subject: [PATCH 06/15] chore: initialize project structure and add configuration files --- .../src/main/resources/Java/pojo.mustache | 12 +- .../client/model/DefaultValue.java | 6 +- .../client/model/DefaultValue.java | 6 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +- .../client/model/ParentWithNullable.java | 2 +- .../.github/workflows/maven.yml | 30 + .../.gitignore | 21 + .../.openapi-generator-ignore | 23 + .../.openapi-generator/FILES | 33 + .../.openapi-generator/VERSION | 1 + .../.travis.yml | 22 + .../README.md | 140 +++ .../api/openapi.yaml | 119 +++ .../build.gradle | 131 +++ .../build.sbt | 1 + .../docs/DefaultApi.md | 205 +++++ .../docs/Foo.md | 18 + .../git_push.sh | 57 ++ .../gradle.properties | 6 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43453 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + .../gradlew | 249 ++++++ .../gradlew.bat | 92 ++ .../pom.xml | 264 ++++++ .../settings.gradle | 1 + .../src/main/AndroidManifest.xml | 3 + .../org/openapitools/client/ApiClient.java | 821 ++++++++++++++++++ .../client/JavaTimeFormatter.java | 68 ++ .../client/RFC3339DateFormat.java | 57 ++ .../client/ServerConfiguration.java | 72 ++ .../openapitools/client/ServerVariable.java | 37 + .../org/openapitools/client/StringUtil.java | 83 ++ .../openapitools/client/api/DefaultApi.java | 271 ++++++ .../openapitools/client/api/package-info.java | 2 + .../openapitools/client/auth/ApiKeyAuth.java | 75 ++ .../client/auth/Authentication.java | 29 + .../client/auth/HttpBasicAuth.java | 51 ++ .../client/auth/HttpBearerAuth.java | 69 ++ .../org/openapitools/client/model/Foo.java | 285 ++++++ .../client/model/package-info.java | 2 + .../org/openapitools/client/package-info.java | 2 + .../client/api/DefaultApiTest.java | 79 ++ .../openapitools/client/model/FooTest.java | 93 ++ .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +- .../client/model/ParentWithNullable.java | 2 +- .../.github/workflows/maven.yml | 30 + .../.gitignore | 21 + .../.openapi-generator-ignore | 23 + .../.openapi-generator/FILES | 35 + .../.openapi-generator/VERSION | 1 + .../.travis.yml | 22 + .../README.md | 140 +++ .../api/openapi.yaml | 119 +++ .../build.gradle | 134 +++ .../build.sbt | 1 + .../docs/DefaultApi.md | 205 +++++ .../docs/Foo.md | 18 + .../git_push.sh | 57 ++ .../gradle.properties | 6 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43453 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + .../gradlew | 249 ++++++ .../gradlew.bat | 92 ++ .../pom.xml | 276 ++++++ .../settings.gradle | 1 + .../src/main/AndroidManifest.xml | 3 + .../org/openapitools/client/ApiClient.java | 808 +++++++++++++++++ .../java/org/openapitools/client/BaseApi.java | 87 ++ .../client/JavaTimeFormatter.java | 68 ++ .../client/RFC3339DateFormat.java | 57 ++ .../client/RFC3339InstantDeserializer.java | 100 +++ .../client/RFC3339JavaTimeModule.java | 33 + .../client/ServerConfiguration.java | 72 ++ .../openapitools/client/ServerVariable.java | 37 + .../openapitools/client/api/DefaultApi.java | 209 +++++ .../openapitools/client/api/package-info.java | 2 + .../openapitools/client/auth/ApiKeyAuth.java | 75 ++ .../client/auth/Authentication.java | 29 + .../client/auth/HttpBasicAuth.java | 51 ++ .../client/auth/HttpBearerAuth.java | 69 ++ .../org/openapitools/client/model/Foo.java | 285 ++++++ .../client/model/package-info.java | 2 + .../org/openapitools/client/package-info.java | 2 + .../client/api/DefaultApiTest.java | 93 ++ .../openapitools/client/model/FooTest.java | 93 ++ .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +- .../client/model/ParentWithNullable.java | 2 +- .../openapitools/client/model/EnumTest.java | 2 +- .../client/model/HealthCheckResult.java | 2 +- .../client/model/NullableClass.java | 20 +- .../client/model/ParentWithNullable.java | 2 +- .../.github/workflows/maven.yml | 30 + .../.gitignore | 21 + .../.openapi-generator-ignore | 23 + .../.openapi-generator/FILES | 35 + .../.openapi-generator/VERSION | 1 + .../.travis.yml | 22 + .../README.md | 140 +++ .../api/openapi.yaml | 119 +++ .../build.gradle | 134 +++ .../build.sbt | 1 + .../docs/DefaultApi.md | 205 +++++ .../docs/Foo.md | 18 + .../git_push.sh | 57 ++ .../gradle.properties | 6 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43453 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + .../gradlew | 249 ++++++ .../gradlew.bat | 92 ++ .../pom.xml | 123 +++ .../settings.gradle | 1 + .../src/main/AndroidManifest.xml | 3 + .../org/openapitools/client/ApiClient.java | 765 ++++++++++++++++ .../client/JavaTimeFormatter.java | 68 ++ .../client/RFC3339DateFormat.java | 57 ++ .../client/RFC3339InstantDeserializer.java | 100 +++ .../client/RFC3339JavaTimeModule.java | 33 + .../client/ServerConfiguration.java | 72 ++ .../openapitools/client/ServerVariable.java | 37 + .../org/openapitools/client/StringUtil.java | 83 ++ .../openapitools/client/api/DefaultApi.java | 273 ++++++ .../openapitools/client/api/package-info.java | 2 + .../openapitools/client/auth/ApiKeyAuth.java | 75 ++ .../client/auth/Authentication.java | 29 + .../client/auth/HttpBasicAuth.java | 51 ++ .../client/auth/HttpBearerAuth.java | 48 + .../org/openapitools/client/model/Foo.java | 284 ++++++ .../client/model/package-info.java | 2 + .../org/openapitools/client/package-info.java | 2 + .../client/api/DefaultApiTest.java | 83 ++ .../openapitools/client/model/FooTest.java | 93 ++ .../.openapi-generator-ignore | 23 + .../.openapi-generator/FILES | 9 + .../.openapi-generator/VERSION | 1 + .../README.md | 27 + .../pom.xml | 87 ++ .../java/org/openapitools/api/ApiUtil.java | 21 + .../java/org/openapitools/api/FileApi.java | 68 ++ .../java/org/openapitools/api/FooApi.java | 88 ++ .../java/org/openapitools/api/UploadApi.java | 70 ++ .../org/openapitools/api/package-info.java | 2 + .../main/java/org/openapitools/model/Foo.java | 383 ++++++++ .../org/openapitools/model/package-info.java | 2 + 161 files changed, 11462 insertions(+), 100 deletions(-) create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.github/workflows/maven.yml create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.gitignore create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator-ignore create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.travis.yml create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/README.md create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/build.sbt create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/DefaultApi.md create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradle.properties create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.jar create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradlew create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradlew.bat create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/settings.gradle create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/AndroidManifest.xml create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/package-info.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/package-info.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/package-info.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/DefaultApiTest.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FooTest.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.github/workflows/maven.yml create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.gitignore create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator-ignore create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.travis.yml create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/README.md create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/build.gradle create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/build.sbt create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/DefaultApi.md create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/git_push.sh create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradle.properties create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.jar create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradlew create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradlew.bat create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/pom.xml create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/settings.gradle create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/AndroidManifest.xml create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/BaseApi.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/package-info.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/package-info.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/package-info.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/DefaultApiTest.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FooTest.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.github/workflows/maven.yml create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.gitignore create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator-ignore create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.travis.yml create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/README.md create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/build.sbt create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/DefaultApi.md create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradle.properties create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.jar create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradlew create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradlew.bat create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/settings.gradle create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/AndroidManifest.xml create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/package-info.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/package-info.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/package-info.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/DefaultApiTest.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FooTest.java create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator-ignore create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/FILES create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/VERSION create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/README.md create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/pom.xml create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/ApiUtil.java create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FileApi.java create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FooApi.java create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadApi.java create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/package-info.java create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/Foo.java create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/package-info.java diff --git a/modules/openapi-generator/src/main/resources/Java/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/pojo.mustache index 633fa56b24ec..e09c78fa90f2 100644 --- a/modules/openapi-generator/src/main/resources/Java/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/pojo.mustache @@ -243,12 +243,18 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens @JsonIgnore {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} - public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{{datatypeWithEnum}}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { - {{#vendorExtensions.x-is-jackson-optional-nullable}}{{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} + public {{{datatypeWithEnum}}} {{getter}}() { + {{#vendorExtensions.x-is-jackson-optional-nullable}} + {{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} if ({{name}} == null) { {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; } - {{/isReadOnly}}return {{name}}.orElse(null);{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}return {{#optionalGettersForNullableFieldsOnly}}{{^required}}java.util.Optional.ofNullable({{name}}){{/required}}{{#required}}{{name}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}{{name}}{{/optionalGettersForNullableFieldsOnly}};{{/vendorExtensions.x-is-jackson-optional-nullable}} + {{/isReadOnly}} + return {{name}}.orElse(null); + {{/vendorExtensions.x-is-jackson-optional-nullable}} + {{^vendorExtensions.x-is-jackson-optional-nullable}} + return {{name}}; + {{/vendorExtensions.x-is-jackson-optional-nullable}} } {{#vendorExtensions.x-is-jackson-optional-nullable}} diff --git a/samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/DefaultValue.java b/samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/DefaultValue.java index a096e297edb3..0f1119a5512b 100644 --- a/samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/DefaultValue.java +++ b/samples/client/echo_api/java/apache-httpclient/src/main/java/org/openapitools/client/model/DefaultValue.java @@ -312,7 +312,7 @@ public DefaultValue addArrayStringNullableItem(String arrayStringNullableItem) { @JsonIgnore public List getArrayStringNullable() { - return arrayStringNullable.orElse(null); + return arrayStringNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_STRING_NULLABLE, required = false) @@ -357,7 +357,7 @@ public DefaultValue addArrayStringExtensionNullableItem(String arrayStringExtens @JsonIgnore public List getArrayStringExtensionNullable() { - return arrayStringExtensionNullable.orElse(null); + return arrayStringExtensionNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_STRING_EXTENSION_NULLABLE, required = false) @@ -390,7 +390,7 @@ public DefaultValue stringNullable(@javax.annotation.Nullable String stringNulla @JsonIgnore public String getStringNullable() { - return stringNullable.orElse(null); + return stringNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_NULLABLE, required = false) diff --git a/samples/client/echo_api/java/resteasy/src/main/java/org/openapitools/client/model/DefaultValue.java b/samples/client/echo_api/java/resteasy/src/main/java/org/openapitools/client/model/DefaultValue.java index 5d70e623d3d5..4265ebf329ac 100644 --- a/samples/client/echo_api/java/resteasy/src/main/java/org/openapitools/client/model/DefaultValue.java +++ b/samples/client/echo_api/java/resteasy/src/main/java/org/openapitools/client/model/DefaultValue.java @@ -309,7 +309,7 @@ public DefaultValue addArrayStringNullableItem(String arrayStringNullableItem) { @JsonIgnore public List getArrayStringNullable() { - return arrayStringNullable.orElse(null); + return arrayStringNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_STRING_NULLABLE, required = false) @@ -354,7 +354,7 @@ public DefaultValue addArrayStringExtensionNullableItem(String arrayStringExtens @JsonIgnore public List getArrayStringExtensionNullable() { - return arrayStringExtensionNullable.orElse(null); + return arrayStringExtensionNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_STRING_EXTENSION_NULLABLE, required = false) @@ -387,7 +387,7 @@ public DefaultValue stringNullable(@javax.annotation.Nullable String stringNulla @JsonIgnore public String getStringNullable() { - return stringNullable.orElse(null); + return stringNullable.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_NULLABLE, required = false) diff --git a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/EnumTest.java index 2c9799716e90..feee38e80eaa 100644 --- a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/EnumTest.java @@ -343,7 +343,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/HealthCheckResult.java index b751dc605598..cf2d8ef985d0 100644 --- a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -58,7 +58,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/NullableClass.java index b520caba0de6..9d9731bc2650 100644 --- a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/NullableClass.java @@ -128,7 +128,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -161,7 +161,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -194,7 +194,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -227,7 +227,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -260,7 +260,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -293,7 +293,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -338,7 +338,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -383,7 +383,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -461,7 +461,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -506,7 +506,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/ParentWithNullable.java index b60137be8529..9e7335df5670 100644 --- a/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/apache-httpclient-jackson3/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -133,7 +133,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/EnumTest.java index 2c9799716e90..feee38e80eaa 100644 --- a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/EnumTest.java @@ -343,7 +343,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java index 9268e332576f..7fca839a748d 100644 --- a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -59,7 +59,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/NullableClass.java index c0d17e48e6d2..70d54258ee41 100644 --- a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/NullableClass.java @@ -129,7 +129,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -162,7 +162,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -195,7 +195,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -228,7 +228,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -261,7 +261,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -294,7 +294,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -339,7 +339,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -384,7 +384,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -462,7 +462,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -507,7 +507,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java index 385143186ea5..6765ec83c9f8 100644 --- a/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/apache-httpclient/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -134,7 +134,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.github/workflows/maven.yml b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.github/workflows/maven.yml new file mode 100644 index 000000000000..4cdd3d63e3e4 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.github/workflows/maven.yml @@ -0,0 +1,30 @@ +# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven +# +# This file is auto-generated by OpenAPI Generator (https://openapi-generator.tech) + +name: Java CI with Maven + +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] + +jobs: + build: + name: Build jspecify + runs-on: ubuntu-latest + strategy: + matrix: + java: [ 17, 21 ] + steps: + - uses: actions/checkout@v4 + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java }} + distribution: 'temurin' + cache: maven + - name: Build with Maven + run: mvn -B package --no-transfer-progress --file pom.xml diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.gitignore b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.gitignore new file mode 100644 index 000000000000..a530464afa1b --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.gitignore @@ -0,0 +1,21 @@ +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# exclude jar for gradle wrapper +!gradle/wrapper/*.jar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +# build files +**/target +target +.gradle +build diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator-ignore b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.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/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES new file mode 100644 index 000000000000..399326b1defb --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES @@ -0,0 +1,33 @@ +.github/workflows/maven.yml +.gitignore +.travis.yml +README.md +api/openapi.yaml +build.gradle +build.sbt +docs/DefaultApi.md +docs/Foo.md +git_push.sh +gradle.properties +gradle/wrapper/gradle-wrapper.jar +gradle/wrapper/gradle-wrapper.properties +gradlew +gradlew.bat +pom.xml +settings.gradle +src/main/AndroidManifest.xml +src/main/java/org/openapitools/client/ApiClient.java +src/main/java/org/openapitools/client/JavaTimeFormatter.java +src/main/java/org/openapitools/client/RFC3339DateFormat.java +src/main/java/org/openapitools/client/ServerConfiguration.java +src/main/java/org/openapitools/client/ServerVariable.java +src/main/java/org/openapitools/client/StringUtil.java +src/main/java/org/openapitools/client/api/DefaultApi.java +src/main/java/org/openapitools/client/api/package-info.java +src/main/java/org/openapitools/client/auth/ApiKeyAuth.java +src/main/java/org/openapitools/client/auth/Authentication.java +src/main/java/org/openapitools/client/auth/HttpBasicAuth.java +src/main/java/org/openapitools/client/auth/HttpBearerAuth.java +src/main/java/org/openapitools/client/model/Foo.java +src/main/java/org/openapitools/client/model/package-info.java +src/main/java/org/openapitools/client/package-info.java diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION new file mode 100644 index 000000000000..186c33c96ed8 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.24.0-SNAPSHOT diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.travis.yml b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.travis.yml new file mode 100644 index 000000000000..1b6741c083c7 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.travis.yml @@ -0,0 +1,22 @@ +# +# Generated by OpenAPI Generator: https://openapi-generator.tech +# +# Ref: https://docs.travis-ci.com/user/languages/java/ +# +language: java +jdk: + - openjdk12 + - openjdk11 + - openjdk10 + - openjdk9 + - openjdk8 +before_install: + # ensure gradlew has proper permission + - chmod a+x ./gradlew +script: + # test using maven + #- mvn test + # test using gradle + - gradle test + # test using sbt + # - sbt test diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/README.md b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/README.md new file mode 100644 index 000000000000..2b8a384a8704 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/README.md @@ -0,0 +1,140 @@ +# petstore-restclient-optional-getters + +jspecify + +- API version: 1.0.0 + +- Generator version: 7.24.0-SNAPSHOT + +test fully qualified name and jspecify + + +*Automatically generated by the [OpenAPI Generator](https://openapi-generator.tech)* + +## Requirements + +Building the API client library requires: + +1. Java 17+ +2. Maven/Gradle + +## Installation + +To install the API client library to your local Maven repository, simply execute: + +```shell +mvn clean install +``` + +To deploy it to a remote Maven repository instead, configure the settings of the repository and execute: + +```shell +mvn clean deploy +``` + +Refer to the [OSSRH Guide](http://central.sonatype.org/pages/ossrh-guide.html) for more information. + +### Maven users + +Add this dependency to your project's POM: + +```xml + + org.openapitools + petstore-restclient-optional-getters + 1.0.0 + compile + +``` + +### Gradle users + +Add this dependency to your project's build file: + +```groovy + repositories { + mavenCentral() // Needed if the 'petstore-restclient-optional-getters' jar has been published to maven central. + mavenLocal() // Needed if the 'petstore-restclient-optional-getters' jar has been published to the local maven repo. + } + + dependencies { + implementation "org.openapitools:petstore-restclient-optional-getters:1.0.0" + } +``` + +### Others + +At first generate the JAR by executing: + +```shell +mvn clean package +``` + +Then manually install the following JARs: + +- `target/petstore-restclient-optional-getters-1.0.0.jar` +- `target/lib/*.jar` + +## Getting Started + +Please follow the [installation](#installation) instruction and execute the following Java code: + +```java + +import org.openapitools.client.*; +import org.openapitools.client.auth.*; +import org.openapitools.client.model.*; +import org.openapitools.client.api.DefaultApi; + +public class DefaultApiExample { + + public static void main(String[] args) { + ApiClient defaultClient = new ApiClient(); + defaultClient.setBasePath("http://localhost"); + + DefaultApi apiInstance = new DefaultApi(defaultClient); + String id = "id_example"; // String | + try { + apiInstance.fileIdGet(id); + } catch (HttpStatusCodeException e) { + System.err.println("Exception when calling DefaultApi#fileIdGet"); + System.err.println("Status code: " + e.getStatusCode().value()); + System.err.println("Reason: " + e.getResponseBodyAsString()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} + +``` + +## Documentation for API Endpoints + +All URIs are relative to *http://localhost* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*DefaultApi* | [**fileIdGet**](docs/DefaultApi.md#fileIdGet) | **GET** /file/{id} | +*DefaultApi* | [**fooDtParamGet**](docs/DefaultApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | +*DefaultApi* | [**uploadPost**](docs/DefaultApi.md#uploadPost) | **POST** /upload | + + +## Documentation for Models + + - [Foo](docs/Foo.md) + + + +## Documentation for Authorization + +Endpoints do not require authorization. + + +## Recommendation + +It's recommended to create an instance of `ApiClient` per thread in a multithreaded environment to avoid any potential issues. + +## Author + + + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml new file mode 100644 index 000000000000..14c4c1ed2afc --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml @@ -0,0 +1,119 @@ +openapi: 3.0.0 +info: + description: test fully qualified name and jspecify + title: jspecify + version: 1.0.0 +servers: +- url: / +paths: + /foo/{dtParam}: + get: + parameters: + - explode: false + in: path + name: dtParam + required: false + schema: + format: date-time + type: string + style: simple + - explode: true + in: query + name: dtQuery + required: false + schema: + format: date-time + type: string + style: form + - explode: true + in: cookie + name: dtCookie + required: false + schema: + format: date-time + type: string + style: form + responses: + default: + content: + application/json: + schema: + $ref: "#/components/schemas/Foo" + description: response + x-accepts: + - application/json + /upload: + post: + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/_upload_post_request" + description: file + responses: + default: + description: ok + x-content-type: multipart/form-data + x-accepts: + - application/json + /file/{id}: + get: + parameters: + - explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + responses: + "200": + description: ok + x-accepts: + - application/json +components: + schemas: + Foo: + example: + dt: 2000-01-23T04:56:07.000+00:00 + binary: "" + listOfDt: + - 2000-01-23T04:56:07.000+00:00 + - 2000-01-23T04:56:07.000+00:00 + listMinIntems: + - 2000-01-23T04:56:07.000+00:00 + - 2000-01-23T04:56:07.000+00:00 + requiredDt: 2000-01-23T04:56:07.000+00:00 + number: 0.8008281904610115 + properties: + dt: + format: date-time + type: string + binary: + format: binary + type: string + listOfDt: + items: + format: date-time + type: string + type: array + listMinIntems: + items: + format: date-time + type: string + minItems: 1 + type: array + requiredDt: + format: date-time + type: string + number: + type: number + required: + - requiredDt + _upload_post_request: + properties: + file: + format: binary + type: string + type: object + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle new file mode 100644 index 000000000000..0d4b51764b09 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle @@ -0,0 +1,131 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + +group = 'org.openapitools' +version = '1.0.0' + +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:1.5.+' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' + } +} + +repositories { + mavenCentral() +} + + +if(hasProperty('target') && target == 'android') { + + apply plugin: 'com.android.library' + apply plugin: 'com.github.dcendents.android-maven' + + android { + compileSdkVersion 23 + buildToolsVersion '23.0.2' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 22 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } + + dependencies { + provided "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version" + } + } + + afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDirectory + task.destinationDirectory = project.file("${project.buildDir}/outputs/jar") + task.archiveFileName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } + } + + task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + archiveClassifier = 'sources' + } + + artifacts { + archives sourcesJar + } + +} else { + + apply plugin: 'java' + apply plugin: 'maven-publish' + + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + + publishing { + publications { + maven(MavenPublication) { + artifactId = 'petstore-restclient-optional-getters' + from components.java + } + } + } + + task execute(type:JavaExec) { + mainClass = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath + } +} + +ext { + jackson_version = "3.1.0" + jackson_annotations_version = "2.21" + spring_web_version = "7.0.5" + jakarta_annotation_version = "3.0.0" + bean_validation_version = "3.1.1" + jodatime_version = "2.14.0" + junit_version = "5.10.2" +} + +dependencies { + implementation "org.springframework:spring-web:$spring_web_version" + implementation "org.springframework:spring-context:$spring_web_version" + implementation "tools.jackson.core:jackson-core:$jackson_version" + implementation "com.fasterxml.jackson.core:jackson-annotations:$jackson_annotations_version" + implementation "tools.jackson.core:jackson-databind:$jackson_version" + implementation "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version" + testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit_version" +} + +test { + // Enable JUnit 5 (Gradle 4.6+). + useJUnitPlatform() + + // Always run tests, even when nothing changed. + dependsOn 'cleanTest' + + // Show test results. + testLogging { + events "passed", "skipped", "failed" + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/build.sbt b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/build.sbt new file mode 100644 index 000000000000..464090415c47 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/build.sbt @@ -0,0 +1 @@ +# TODO diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/DefaultApi.md b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/DefaultApi.md new file mode 100644 index 000000000000..7a0ddb006a06 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/DefaultApi.md @@ -0,0 +1,205 @@ +# DefaultApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**fileIdGet**](DefaultApi.md#fileIdGet) | **GET** /file/{id} | | +| [**fooDtParamGet**](DefaultApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | | +| [**uploadPost**](DefaultApi.md#uploadPost) | **POST** /upload | | + + + +## fileIdGet + +> fileIdGet(id) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.DefaultApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + DefaultApi apiInstance = new DefaultApi(defaultClient); + String id = "id_example"; // String | + try { + apiInstance.fileIdGet(id); + } catch (ApiException e) { + System.err.println("Exception when calling DefaultApi#fileIdGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **id** | **String**| | | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | ok | - | + + +## fooDtParamGet + +> Foo fooDtParamGet(dtParam, dtQuery, dtCookie) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.DefaultApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + DefaultApi apiInstance = new DefaultApi(defaultClient); + java.time.Instant dtParam = new java.time.Instant(); // java.time.Instant | + java.time.Instant dtQuery = new java.time.Instant(); // java.time.Instant | + java.time.Instant dtCookie = new java.time.Instant(); // java.time.Instant | + try { + Foo result = apiInstance.fooDtParamGet(dtParam, dtQuery, dtCookie); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling DefaultApi#fooDtParamGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **dtParam** | **java.time.Instant**| | [optional] | +| **dtQuery** | **java.time.Instant**| | [optional] | +| **dtCookie** | **java.time.Instant**| | [optional] | + +### Return type + +[**Foo**](Foo.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | response | - | + + +## uploadPost + +> uploadPost(_file) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.DefaultApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + DefaultApi apiInstance = new DefaultApi(defaultClient); + File _file = new File("/path/to/file"); // File | + try { + apiInstance.uploadPost(_file); + } catch (ApiException e) { + System.err.println("Exception when calling DefaultApi#uploadPost"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **_file** | **File**| | [optional] | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: multipart/form-data +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | ok | - | + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md new file mode 100644 index 000000000000..d03d21cd097d --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md @@ -0,0 +1,18 @@ + + +# Foo + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**dt** | **java.time.Instant** | | [optional] | +|**binary** | **File** | | [optional] | +|**listOfDt** | **List<java.time.Instant>** | | [optional] | +|**listMinIntems** | **List<java.time.Instant>** | | [optional] | +|**requiredDt** | **java.time.Instant** | | | +|**number** | **java.math.BigDecimal** | | [optional] | + + + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh new file mode 100644 index 000000000000..f53a75d4fabe --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=$(git remote) +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradle.properties b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradle.properties new file mode 100644 index 000000000000..a3408578278a --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradle.properties @@ -0,0 +1,6 @@ +# This file is automatically generated by OpenAPI Generator (https://github.com/openAPITools/openapi-generator). +# To include other gradle properties as part of the code generation process, please use the `gradleProperties` option. +# +# Gradle properties reference: https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties +# For example, uncomment below to build for Android +#target = android diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.jar b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e6441136f3d4ba8a0da8d277868979cfbc8ad796 GIT binary patch literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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
NnX)EH+Nua)3Y(c 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 '} +case $link in #( +/*) app_path=$link ;; #( +*) app_path=$APP_HOME$link ;; +esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { +echo "$*" +} >&2 + +die () { +echo +echo "$*" +echo +exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( +CYGWIN* ) cygwin=true ;; #( +Darwin* ) darwin=true ;; #( +MSYS* | MINGW* ) msys=true ;; #( +NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then +if [ -x "$JAVA_HOME/jre/sh/java" ] ; then +# IBM's JDK on AIX uses strange locations for the executables +JAVACMD=$JAVA_HOME/jre/sh/java +else +JAVACMD=$JAVA_HOME/bin/java +fi +if [ ! -x "$JAVACMD" ] ; then +die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi +else +JAVACMD=java +if ! command -v java >/dev/null 2>&1 +then +die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then +case $MAX_FD in #( +max*) +# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. +# shellcheck disable=SC2039,SC3045 +MAX_FD=$( ulimit -H -n ) || +warn "Could not query maximum file descriptor limit" +esac +case $MAX_FD in #( +'' | soft) :;; #( +*) +# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. +# shellcheck disable=SC2039,SC3045 +ulimit -n "$MAX_FD" || +warn "Could not set maximum file descriptor limit to $MAX_FD" +esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then +APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) +CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + +JAVACMD=$( cygpath --unix "$JAVACMD" ) + +# Now convert the arguments - kludge to limit ourselves to /bin/sh +for arg do +if +case $arg in #( +-*) false ;; # don't mess with options #( +/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath +[ -e "$t" ] ;; #( +*) false ;; +esac +then +arg=$( cygpath --path --ignore --mixed "$arg" ) +fi +# Roll the args list around exactly as many times as the number of +# args, so each arg winds up back in the position where it started, but +# possibly modified. +# +# NB: a `for` loop captures its iteration list before it begins, so +# changing the positional parameters here affects neither the number of +# iterations, nor the values presented in `arg`. +shift # remove old arg +set -- "$@" "$arg" # push replacement arg +done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ +"-Dorg.gradle.appname=$APP_BASE_NAME" \ +-classpath "$CLASSPATH" \ +org.gradle.wrapper.GradleWrapperMain \ +"$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then +die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( +printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | +xargs -n1 | +sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | +tr '\n' ' ' +)" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradlew.bat b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradlew.bat new file mode 100644 index 000000000000..25da30dbdeee --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml new file mode 100644 index 000000000000..c6ecc801ab45 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml @@ -0,0 +1,264 @@ + + 4.0.0 + org.openapitools + petstore-restclient-optional-getters + jar + petstore-restclient-optional-getters + 1.0.0 + https://github.com/openapitools/openapi-generator + OpenAPI Java + + scm:git:git@github.com:openapitools/openapi-generator.git + scm:git:git@github.com:openapitools/openapi-generator.git + https://github.com/openapitools/openapi-generator + + + + + Unlicense + http://unlicense.org + repo + + + + + + OpenAPI-Generator Contributors + team@openapitools.org + OpenAPITools.org + http://openapitools.org + + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.6.2 + + + enforce-maven + + enforce + + + + + 2.2.0 + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.5.4 + + + + loggerPath + conf/log4j.properties + + + -Xms512m -Xmx1500m + methods + false + true + + + + maven-dependency-plugin + + + package + + copy-dependencies + + + ${project.build.directory}/lib + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.5.0 + + + + test-jar + + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.1 + + + add_sources + generate-sources + + add-source + + + + src/main/java + + + + + add_test_sources + generate-test-sources + + add-test-source + + + + src/test/java + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.15.0 + + 17 + 17 + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.12.0 + + none + + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.4.0 + + + attach-sources + + jar-no-fork + + + + + + + + + + sign-artifacts + + + + org.apache.maven.plugins + maven-gpg-plugin + 3.2.8 + + + sign-artifacts + verify + + sign + + + + + + + + + + + + + + org.springframework + spring-web + ${spring-web-version} + + + org.springframework + spring-context + ${spring-web-version} + + + + + tools.jackson.core + jackson-core + ${jackson-version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson-annotations-version} + + + tools.jackson.core + jackson-databind + ${jackson-version} + + + tools.jackson.jakarta.rs + jackson-jakarta-rs-json-provider + ${jackson-version} + + + + + + jakarta.annotation + jakarta.annotation-api + ${jakarta-annotation-version} + provided + + + + + org.junit.jupiter + junit-jupiter-engine + ${junit-version} + test + + + + UTF-8 + + 7.0.5 + 3.1.0 + 3.0.0 + + 2.21 + 3.1.1 + 5.10.2 + + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/settings.gradle b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/settings.gradle new file mode 100644 index 000000000000..998d3d0b5b01 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/settings.gradle @@ -0,0 +1 @@ +rootProject.name = "petstore-restclient-optional-getters" \ No newline at end of file diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/AndroidManifest.xml b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/AndroidManifest.xml new file mode 100644 index 000000000000..54fbcb3da1e8 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java new file mode 100644 index 000000000000..740612bbc83b --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java @@ -0,0 +1,821 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + + +import tools.jackson.databind.DeserializationFeature; + +import tools.jackson.core.JacksonException; +import tools.jackson.databind.json.JsonMapper; +import org.springframework.http.converter.HttpMessageConverters; +import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter; + +import java.util.function.Consumer; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.InvalidMediaTypeException; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.util.CollectionUtils; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; +import org.springframework.web.client.RestClientException; +import org.springframework.web.util.UriComponentsBuilder; +import org.springframework.web.client.RestClient; +import org.springframework.web.client.RestClient.ResponseSpec; +import java.util.Optional; + +import java.text.DateFormat; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TimeZone; +import java.util.function.Supplier; + +import jakarta.annotation.Nullable; + +import java.time.OffsetDateTime; + +import org.openapitools.client.auth.Authentication; +import org.openapitools.client.auth.HttpBasicAuth; +import org.openapitools.client.auth.HttpBearerAuth; +import org.openapitools.client.auth.ApiKeyAuth; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class ApiClient extends JavaTimeFormatter { + public enum CollectionFormat { + CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null); + + protected final String separator; + CollectionFormat(String separator) { + this.separator = separator; + } + + protected String collectionToString(Collection collection) { + return StringUtils.collectionToDelimitedString(collection, separator); + } + } + + protected final HttpHeaders defaultHeaders = new HttpHeaders(); + protected final MultiValueMap defaultCookies = new LinkedMultiValueMap<>(); + + protected String basePath = "http://localhost"; + protected List servers = new ArrayList(Arrays.asList( + new ServerConfiguration( + "", + "No description provided", + new HashMap() + ) + )); + protected Integer serverIndex = 0; + protected Map serverVariables = null; + + protected final RestClient restClient; + protected final DateFormat dateFormat; + protected final JsonMapper mapper; + protected Map authentications; + + + public ApiClient() { + this(null); + } + + public ApiClient(RestClient restClient) { + this(restClient, createDefaultDateFormat()); + } + + public ApiClient(JsonMapper mapper, DateFormat format) { + this(null, mapper, format); + } + + public ApiClient(RestClient restClient, JsonMapper mapper, DateFormat format) { + this.mapper = mapper; + this.restClient = Optional.ofNullable(restClient).orElseGet(() -> buildRestClient(this.mapper)); + this.dateFormat = format; + this.init(); + } + + protected ApiClient(RestClient restClient, DateFormat format) { + this(restClient, createDefaultMapper(format), format); + } + + public static DateFormat createDefaultDateFormat() { + DateFormat dateFormat = new RFC3339DateFormat(); + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + return dateFormat; + } + + public static JsonMapper createDefaultMapper(@Nullable DateFormat dateFormat) { + return JsonMapper.builder() + .defaultDateFormat(dateFormat) + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .build(); + } + + protected void init() { + // Setup authentications (key: authentication name, value: authentication). + authentications = new HashMap<>(); + // Prevent the authentications from being modified. + authentications = Collections.unmodifiableMap(authentications); + } + + /** + * Build the RestClientBuilder used to make RestClient. + * @param mapper JsonMapper used for serialize/deserialize + * @return RestClient + */ + public static RestClient.Builder buildRestClientBuilder(JsonMapper mapper) { + + Consumer messageConverters = builder -> { + builder.addCustomConverter(new JacksonJsonHttpMessageConverter(mapper)); + }; + + return RestClient.builder().configureMessageConverters(messageConverters); + } + + /** + * Build the RestClientBuilder used to make RestClient. + * @return RestClient + */ + public static RestClient.Builder buildRestClientBuilder() { + return buildRestClientBuilder(createDefaultMapper(null)); + } + + /** + * Build the RestClient used to make HTTP requests. + * @param mapper JsonMapper used for serialize/deserialize + * @return RestClient + */ + public static RestClient buildRestClient(JsonMapper mapper) { + return buildRestClientBuilder(mapper).build(); + } + + /** + * Build the RestClient used to make HTTP requests. + * @return RestClient + */ + public static RestClient buildRestClient() { + return buildRestClientBuilder(createDefaultMapper(null)).build(); + } + + /** + * Get the current base path + * @return String the base path + */ + public String getBasePath() { + return basePath; + } + + /** + * Set the base path, which should include the host + * @param basePath the base path + * @return ApiClient this client + */ + public ApiClient setBasePath(String basePath) { + this.basePath = basePath; + this.serverIndex = null; + return this; + } + + public List getServers() { + return servers; + } + + public ApiClient setServers(List servers) { + this.servers = servers; + return this; + } + + public Integer getServerIndex() { + return serverIndex; + } + + public ApiClient setServerIndex(Integer serverIndex) { + this.serverIndex = serverIndex; + return this; + } + + public Map getServerVariables() { + return serverVariables; + } + + public ApiClient setServerVariables(Map serverVariables) { + this.serverVariables = serverVariables; + return this; + } + + /** + * Get authentications (key: authentication name, value: authentication). + * @return Map the currently configured authentication types + */ + public Map getAuthentications() { + return authentications; + } + + /** + * Get authentication for the given name. + * + * @param authName The authentication name + * @return The authentication, null if not found + */ + public Authentication getAuthentication(String authName) { + return authentications.get(authName); + } + + /** + * Helper method to set access token for the first Bearer authentication. + * @param bearerToken Bearer token + */ + public void setBearerToken(String bearerToken) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBearerAuth) { + ((HttpBearerAuth) auth).setBearerToken(bearerToken); + return; + } + } + throw new RuntimeException("No Bearer authentication configured!"); + } + + /** + * Helper method to set the supplier of access tokens for Bearer authentication. + * + * @param tokenSupplier the token supplier function + */ + public void setBearerToken(Supplier tokenSupplier) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBearerAuth) { + ((HttpBearerAuth) auth).setBearerToken(tokenSupplier); + return; + } + } + throw new RuntimeException("No Bearer authentication configured!"); + } + + /** + * Helper method to set username for the first HTTP basic authentication. + * @param username the username + */ + public void setUsername(String username) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setUsername(username); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set password for the first HTTP basic authentication. + * @param password the password + */ + public void setPassword(String password) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setPassword(password); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set API key value for the first API key authentication. + * @param apiKey the API key + */ + public void setApiKey(String apiKey) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKey(apiKey); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** + * Helper method to set API key prefix for the first API key authentication. + * @param apiKeyPrefix the API key prefix + */ + public void setApiKeyPrefix(String apiKeyPrefix) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** + * Set the User-Agent header's value (by adding to the default header map). + * @param userAgent the user agent string + * @return ApiClient this client + */ + public ApiClient setUserAgent(String userAgent) { + addDefaultHeader("User-Agent", userAgent); + return this; + } + + /** + * Add a default header. + * + * @param name The header's name + * @param value The header's value + * @return ApiClient this client + */ + public ApiClient addDefaultHeader(String name, String value) { + defaultHeaders.set(name, value); + return this; + } + + /** + * Add a default cookie. + * + * @param name The cookie's name + * @param value The cookie's value + * @return ApiClient this client + */ + public ApiClient addDefaultCookie(String name, String value) { + if (defaultCookies.containsKey(name)) { + defaultCookies.remove(name); + } + defaultCookies.add(name, value); + return this; + } + + /** + * Get the date format used to parse/format date parameters. + * @return DateFormat format + */ + public DateFormat getDateFormat() { + return dateFormat; + } + + /** + * Parse the given string into Date object. + */ + public Date parseDate(String str) { + try { + return dateFormat.parse(str); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + + /** + * Format the given Date object into string. + */ + public String formatDate(Date date) { + return dateFormat.format(date); + } + + /** + * Get the JsonMapper used to make HTTP requests. + * @return JsonMapper mapper + */ + public JsonMapper getJsonMapper() { + return mapper; + } + + /** + * Get the RestClient used to make HTTP requests. + * @return RestClient restClient + */ + public RestClient getRestClient() { + return restClient; + } + + /** + * Format the given parameter object into string. + * @param param the object to convert + * @return String the parameter represented as a String + */ + public String parameterToString(Object param) { + if (param == null) { + return ""; + } else if (param instanceof Date) { + return formatDate( (Date) param); + } else if (param instanceof OffsetDateTime) { + return formatOffsetDateTime((OffsetDateTime) param); + } else if (param instanceof Collection) { + StringBuilder b = new StringBuilder(); + for(Object o : (Collection) param) { + if(b.length() > 0) { + b.append(","); + } + b.append(String.valueOf(o)); + } + return b.toString(); + } else { + return String.valueOf(param); + } + } + + /** + * Converts a parameter to a {@link MultiValueMap} containing Json-serialized values for use in REST requests + * @param collectionFormat The format to convert to + * @param name The name of the parameter + * @param value The parameter's value + * @return a Map containing the Json-serialized String value(s) of the input parameter + */ + public MultiValueMap parameterToMultiValueMapJson(CollectionFormat collectionFormat, String name, Object value) { + Collection valueCollection; + if (value instanceof Collection) { + valueCollection = (Collection) value; + } else { + try { + return parameterToMultiValueMap(collectionFormat, name, mapper.writeValueAsString(value)); + } catch (JacksonException e) { + throw new RuntimeException(e); + } + } + + List values = new ArrayList<>(); + for(Object o : valueCollection) { + try { + values.add(mapper.writeValueAsString(o)); + } catch (JacksonException e) { + throw new RuntimeException(e); + } + } + return parameterToMultiValueMap(collectionFormat, name, "[" + StringUtils.collectionToDelimitedString(values, collectionFormat.separator) + "]"); + } + + /** + * Converts a parameter to a {@link MultiValueMap} for use in REST requests + * @param collectionFormat The format to convert to + * @param name The name of the parameter + * @param value The parameter's value + * @return a Map containing the String value(s) of the input parameter + */ + public MultiValueMap parameterToMultiValueMap(CollectionFormat collectionFormat, String name, Object value) { + final MultiValueMap params = new LinkedMultiValueMap<>(); + + if (name == null || name.isEmpty() || value == null) { + return params; + } + + if(collectionFormat == null) { + collectionFormat = CollectionFormat.CSV; + } + + if (value instanceof Map) { + @SuppressWarnings("unchecked") + final Map valuesMap = (Map) value; + for (final Entry entry : valuesMap.entrySet()) { + params.add(entry.getKey(), parameterToString(entry.getValue())); + } + return params; + } + + Collection valueCollection = null; + if (value instanceof Collection) { + valueCollection = (Collection) value; + } else { + params.add(name, parameterToString(value)); + return params; + } + + if (valueCollection.isEmpty()){ + return params; + } + + if (collectionFormat.equals(CollectionFormat.MULTI)) { + for (Object item : valueCollection) { + params.add(name, parameterToString(item)); + } + return params; + } + + List values = new ArrayList<>(); + for(Object o : valueCollection) { + values.add(parameterToString(o)); + } + params.add(name, collectionFormat.collectionToString(values)); + + return params; + } + + /** + * Check if the given {@code String} is a JSON MIME. + * @param mediaType the input MediaType + * @return boolean true if the MediaType represents JSON, false otherwise + */ + public boolean isJsonMime(String mediaType) { + // "* / *" is default to JSON + if ("*/*".equals(mediaType)) { + return true; + } + + try { + return isJsonMime(MediaType.parseMediaType(mediaType)); + } catch (InvalidMediaTypeException e) { + } + return false; + } + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + * @param mediaType the input MediaType + * @return boolean true if the MediaType represents JSON, false otherwise + */ + public boolean isJsonMime(MediaType mediaType) { + return mediaType != null && (MediaType.APPLICATION_JSON.isCompatibleWith(mediaType) || mediaType.getSubtype().matches("^.*(\\+json|ndjson)[;]?\\s*$")); + } + + /** + * Check if the given {@code String} is a Problem JSON MIME (RFC-7807). + * @param mediaType the input MediaType + * @return boolean true if the MediaType represents Problem JSON, false otherwise + */ + public boolean isProblemJsonMime(String mediaType) { + return "application/problem+json".equalsIgnoreCase(mediaType); + } + + /** + * Select the Accept header's value from the given accepts array: + * if JSON exists in the given array, use it; + * otherwise use all of them (joining into a string) + * + * @param accepts The accepts array to select from + * @return List The list of MediaTypes to use for the Accept header + */ + public List selectHeaderAccept(String[] accepts) { + if (accepts.length == 0) { + return null; + } + for (String accept : accepts) { + MediaType mediaType = MediaType.parseMediaType(accept); + if (isJsonMime(mediaType) && !isProblemJsonMime(accept)) { + return Collections.singletonList(mediaType); + } + } + return MediaType.parseMediaTypes(StringUtils.arrayToCommaDelimitedString(accepts)); + } + + /** + * Select the Content-Type header's value from the given array: + * if JSON exists in the given array, use it; + * otherwise use the first one of the array. + * + * @param contentTypes The Content-Type array to select from + * @return MediaType The Content-Type header to use. If the given array is empty, null will be returned. + */ + public MediaType selectHeaderContentType(String[] contentTypes) { + if (contentTypes.length == 0) { + return null; + } + for (String contentType : contentTypes) { + MediaType mediaType = MediaType.parseMediaType(contentType); + if (isJsonMime(mediaType)) { + return mediaType; + } + } + return MediaType.parseMediaType(contentTypes[0]); + } + + /** + * Select the body to use for the request + * + * @param obj the body object + * @param formParams the form parameters + * @param contentType the content type of the request + * @return Object the selected body + */ + protected Object selectBody(Object obj, MultiValueMap formParams, MediaType contentType) { + boolean isForm = MediaType.MULTIPART_FORM_DATA.isCompatibleWith(contentType) || MediaType.APPLICATION_FORM_URLENCODED.isCompatibleWith(contentType); + return isForm ? formParams : obj; + } + + /** + * Invoke API by sending HTTP request with the given options. + * + * @param the return type to use + * @param path The sub-path of the HTTP URL + * @param method The request method + * @param pathParams The path parameters + * @param queryParams The query parameters + * @param body The request body object + * @param headerParams The header parameters + * @param formParams The form parameters + * @param accept The request's Accept header + * @param contentType The request's Content-Type header + * @param authNames The authentications to apply + * @param returnType The return type into which to deserialize the response + * @return The response body in chosen type + */ + public ResponseSpec invokeAPI(String path, HttpMethod method, Map pathParams, MultiValueMap queryParams, Object body, HttpHeaders headerParams, MultiValueMap cookieParams, MultiValueMap formParams, List accept, MediaType contentType, String[] authNames, ParameterizedTypeReference returnType) throws RestClientException { + final RestClient.RequestBodySpec requestBuilder = prepareRequest(path, method, pathParams, queryParams, body, headerParams, cookieParams, formParams, accept, contentType, authNames); + return requestBuilder.retrieve(); + } + + /** + * Include queryParams in uriParams taking into account the paramName + * @param queryParams The query parameters + * @param uriParams The path parameters + * return templatized query string + */ + protected String generateQueryUri(MultiValueMap queryParams, Map uriParams) { + StringBuilder queryBuilder = new StringBuilder(); + queryParams.forEach((name, values) -> { + if (CollectionUtils.isEmpty(values)) { + if (queryBuilder.length() != 0) { + queryBuilder.append('&'); + } + queryBuilder.append(name); + } else { + int valueItemCounter = 0; + for (Object value : values) { + if (queryBuilder.length() != 0) { + queryBuilder.append('&'); + } + queryBuilder.append(name); + if (value != null) { + String templatizedKey = name + valueItemCounter++; + uriParams.put(templatizedKey, value.toString()); + queryBuilder.append('=').append("{").append(templatizedKey).append("}"); + } + } + } + }); + return queryBuilder.toString(); + } + + protected RestClient.RequestBodySpec prepareRequest(String path, HttpMethod method, Map pathParams, + MultiValueMap queryParams, Object body, HttpHeaders headerParams, + MultiValueMap cookieParams, MultiValueMap formParams, List accept, + MediaType contentType, String[] authNames) { + updateParamsForAuth(authNames, queryParams, headerParams, cookieParams); + + String baseUrl = basePath; + if (serverIndex != null) { + if (serverIndex < 0 || serverIndex >= servers.size()) { + throw new ArrayIndexOutOfBoundsException(String.format( + java.util.Locale.ROOT, + "Invalid index %d when selecting the host settings. Must be less than %d", serverIndex, servers.size() + )); + } + baseUrl = servers.get(serverIndex).URL(serverVariables); + } + + final UriComponentsBuilder builder = UriComponentsBuilder + .fromUriString(baseUrl) + .path(path); + + String finalUri = builder.build(false).toUriString(); + Map uriParams = new HashMap<>(); + uriParams.putAll(pathParams); + + if (queryParams != null && !queryParams.isEmpty()) { + //Include queryParams in uriParams taking into account the paramName + String queryUri = generateQueryUri(queryParams, uriParams); + //Append to finalUri the templatized query string like "?param1={param1Value}&....... + finalUri += "?" + queryUri; + } + + final RestClient.RequestBodySpec requestBuilder = restClient.method(method).uri(finalUri, uriParams); + + if (accept != null) { + requestBuilder.accept(accept.toArray(new MediaType[accept.size()])); + } + if(contentType != null) { + requestBuilder.contentType(contentType); + } + + addHeadersToRequest(headerParams, requestBuilder); + addHeadersToRequest(defaultHeaders, requestBuilder); + addCookiesToRequest(cookieParams, requestBuilder); + addCookiesToRequest(defaultCookies, requestBuilder); + + if (MediaType.MULTIPART_FORM_DATA.isCompatibleWith(contentType)) { + formParams.forEach( + (k, v) -> { + if (v instanceof java.util.ArrayList && !v.isEmpty()) { + Object first = v.get(0); + if (first != null && first.getClass().isEnum()) { + v.set(0, first.toString()); + } + } + }); + } + + var selectedBody = selectBody(body, formParams, contentType); + if (selectedBody != null) { + requestBuilder.body(selectedBody); + } + + return requestBuilder; + } + + /** + * Add headers to the request that is being built + * @param headers The headers to add + * @param requestBuilder The current request + */ + protected void addHeadersToRequest(HttpHeaders headers, RestClient.RequestBodySpec requestBuilder) { + for (Entry> entry : headers.headerSet()) { + List values = entry.getValue(); + for(String value : values) { + if (value != null) { + requestBuilder.header(entry.getKey(), value); + } + } + } + } + + /** + * Add cookies to the request that is being built + * + * @param cookies The cookies to add + * @param requestBuilder The current request + */ + protected void addCookiesToRequest(MultiValueMap cookies, RestClient.RequestBodySpec requestBuilder) { + if (!cookies.isEmpty()) { + requestBuilder.header("Cookie", buildCookieHeader(cookies)); + } + } + + /** + * Build cookie header. Keeps a single value per cookie (as per + * RFC6265 section 5.3). + * + * @param cookies map all cookies + * @return header string for cookies. + */ + protected String buildCookieHeader(MultiValueMap cookies) { + final StringBuilder cookieValue = new StringBuilder(); + String delimiter = ""; + for (final Map.Entry> entry : cookies.entrySet()) { + final String value = entry.getValue().get(entry.getValue().size() - 1); + cookieValue.append(String.format(java.util.Locale.ROOT, "%s%s=%s", delimiter, entry.getKey(), value)); + delimiter = "; "; + } + return cookieValue.toString(); + } + + /** + * Update query and header parameters based on authentication settings. + * + * @param authNames The authentications to apply + * @param queryParams The query parameters + * @param headerParams The header parameters + * @param cookieParams the cookie parameters + */ + protected void updateParamsForAuth(String[] authNames, MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams) { + for (String authName : authNames) { + Authentication auth = authentications.get(authName); + if (auth == null) { + throw new RestClientException("Authentication undefined: " + authName); + } + auth.applyToParams(queryParams, headerParams, cookieParams); + } + } + + /** + * Formats the specified collection path parameter to a string value. + * + * @param collectionFormat The collection format of the parameter. + * @param values The values of the parameter. + * @return String representation of the parameter + */ + public String collectionPathParameterToString(CollectionFormat collectionFormat, Collection values) { + // create the value based on the collection format + if (CollectionFormat.MULTI.equals(collectionFormat)) { + // not valid for path params + return parameterToString(values); + } + + // collectionFormat is assumed to be "csv" by default + if(collectionFormat == null) { + collectionFormat = CollectionFormat.CSV; + } + + return collectionFormat.collectionToString(values); + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java new file mode 100644 index 000000000000..d25e3fc7c76d --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java @@ -0,0 +1,68 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package org.openapitools.client; + +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; + +/** + * Class that add parsing/formatting support for Java 8+ {@code OffsetDateTime} class. + * It's generated for java clients when {@code AbstractJavaCodegen#dateLibrary} specified as {@code java8}. + */ +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class JavaTimeFormatter { + private DateTimeFormatter offsetDateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; + + /** + * Get the date format used to parse/format {@code OffsetDateTime} parameters. + * + * @return DateTimeFormatter + */ + public DateTimeFormatter getOffsetDateTimeFormatter() { + return offsetDateTimeFormatter; + } + + /** + * Set the date format used to parse/format {@code OffsetDateTime} parameters. + * + * @param offsetDateTimeFormatter {@code DateTimeFormatter} + */ + public void setOffsetDateTimeFormatter(DateTimeFormatter offsetDateTimeFormatter) { + this.offsetDateTimeFormatter = offsetDateTimeFormatter; + } + + /** + * Parse the given string into {@code OffsetDateTime} object. + * + * @param str String + * @return {@code OffsetDateTime} + */ + public OffsetDateTime parseOffsetDateTime(String str) { + try { + return OffsetDateTime.parse(str, offsetDateTimeFormatter); + } catch (DateTimeParseException e) { + throw new RuntimeException(e); + } + } + + /** + * Format the given {@code OffsetDateTime} object into string. + * + * @param offsetDateTime {@code OffsetDateTime} + * @return {@code OffsetDateTime} in string format + */ + public String formatOffsetDateTime(OffsetDateTime offsetDateTime) { + return offsetDateTimeFormatter.format(offsetDateTime); + } +} \ No newline at end of file diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java new file mode 100644 index 000000000000..9c82900edf4e --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java @@ -0,0 +1,57 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package org.openapitools.client; + +import java.text.DateFormat; +import java.text.FieldPosition; +import java.text.ParsePosition; +import java.util.Date; +import java.text.DecimalFormat; +import java.util.GregorianCalendar; +import java.util.TimeZone; +import tools.jackson.databind.util.StdDateFormat; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class RFC3339DateFormat extends DateFormat { + private static final long serialVersionUID = 1L; + private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC"); + + private final StdDateFormat fmt = new StdDateFormat() + .withTimeZone(TIMEZONE_Z) + .withColonInTimeZone(true); + + public RFC3339DateFormat() { + this.calendar = new GregorianCalendar(); + this.numberFormat = new DecimalFormat(); + } + + @Override + public Date parse(String source) { + return parse(source, new ParsePosition(0)); + } + + @Override + public Date parse(String source, ParsePosition pos) { + return fmt.parse(source, pos); + } + + @Override + public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { + return fmt.format(date, toAppendTo, fieldPosition); + } + + @Override + public Object clone() { + return super.clone(); + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java new file mode 100644 index 000000000000..017652e55155 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java @@ -0,0 +1,72 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import java.util.Map; + +/** + * Representing a Server configuration. + */ +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class ServerConfiguration { + public String URL; + public String description; + public Map variables; + + /** + * @param URL A URL to the target host. + * @param description A description of the host designated by the URL. + * @param variables A map between a variable name and its value. The value is used for substitution in the server's URL template. + */ + public ServerConfiguration(String URL, String description, Map variables) { + this.URL = URL; + this.description = description; + this.variables = variables; + } + + /** + * Format URL template using given variables. + * + * @param variables A map between a variable name and its value. + * @return Formatted URL. + */ + public String URL(Map variables) { + String url = this.URL; + + // go through variables and replace placeholders + for (Map.Entry variable: this.variables.entrySet()) { + String name = variable.getKey(); + ServerVariable serverVariable = variable.getValue(); + String value = serverVariable.defaultValue; + + if (variables != null && variables.containsKey(name)) { + value = variables.get(name); + if (serverVariable.enumValues.size() > 0 && !serverVariable.enumValues.contains(value)) { + throw new IllegalArgumentException("The variable " + name + " in the server URL has invalid value " + value + "."); + } + } + url = url.replace("{" + name + "}", value); + } + return url; + } + + /** + * Format URL template using default server variables. + * + * @return Formatted URL. + */ + public String URL() { + return URL(null); + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java new file mode 100644 index 000000000000..0740bf8aa46f --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java @@ -0,0 +1,37 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import java.util.HashSet; + +/** + * Representing a Server Variable for server URL template substitution. + */ +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class ServerVariable { + public String description; + public String defaultValue; + public HashSet enumValues = null; + + /** + * @param description A description for the server variable. + * @param defaultValue The default value to use for substitution. + * @param enumValues An enumeration of string values to be used if the substitution options are from a limited set. + */ + public ServerVariable(String description, String defaultValue, HashSet enumValues) { + this.description = description; + this.defaultValue = defaultValue; + this.enumValues = enumValues; + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java new file mode 100644 index 000000000000..0e31119b87fc --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java @@ -0,0 +1,83 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import java.util.Collection; +import java.util.Iterator; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class StringUtil { + /** + * Check if the given array contains the given value (with case-insensitive comparison). + * + * @param array The array + * @param value The value to search + * @return true if the array contains the value + */ + public static boolean containsIgnoreCase(String[] array, String value) { + for (String str : array) { + if (value == null && str == null) { + return true; + } + if (value != null && value.equalsIgnoreCase(str)) { + return true; + } + } + return false; + } + + /** + * Join an array of strings with the given separator. + *

+ * Note: This might be replaced by utility method from commons-lang or guava someday + * if one of those libraries is added as dependency. + *

+ * + * @param array The array of strings + * @param separator The separator + * @return the resulting string + */ + public static String join(String[] array, String separator) { + int len = array.length; + if (len == 0) { + return ""; + } + + StringBuilder out = new StringBuilder(); + out.append(array[0]); + for (int i = 1; i < len; i++) { + out.append(separator).append(array[i]); + } + return out.toString(); + } + + /** + * Join a list of strings with the given separator. + * + * @param list The list of strings + * @param separator The separator + * @return the resulting string + */ + public static String join(Collection list, String separator) { + Iterator iterator = list.iterator(); + StringBuilder out = new StringBuilder(); + if (iterator.hasNext()) { + out.append(iterator.next()); + } + while (iterator.hasNext()) { + out.append(separator).append(iterator.next()); + } + return out.toString(); + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java new file mode 100644 index 000000000000..576961a5e635 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java @@ -0,0 +1,271 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; + +import java.io.File; +import org.openapitools.client.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Arrays; +import java.util.stream.Collectors; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestClient.ResponseSpec; +import org.springframework.web.client.RestClientResponseException; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class DefaultApi { + private ApiClient apiClient; + + public DefaultApi() { + this(new ApiClient()); + } + + public DefaultApi(ApiClient apiClient) { + this.apiClient = apiClient; + } + + public ApiClient getApiClient() { + return apiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.apiClient = apiClient; + } + + /** + * + * + *

200 - ok + * @param id The id parameter + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec fileIdGetRequestCreation(String id) throws RestClientResponseException { + Object postBody = null; + // verify the required parameter 'id' is set + if (id == null) { + throw new RestClientResponseException("Missing the required parameter 'id' when calling fileIdGet", HttpStatus.BAD_REQUEST.value(), HttpStatus.BAD_REQUEST.getReasonPhrase(), null, null, null); + } + // create path and map variables + final Map pathParams = new HashMap<>(); + + pathParams.put("id", id); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap<>(); + final MultiValueMap formParams = new LinkedMultiValueMap<>(); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return apiClient.invokeAPI("/file/{id}", HttpMethod.GET, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

200 - ok + * @param id The id parameter + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public void fileIdGet( String id) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + fileIdGetRequestCreation(id).body(localVarReturnType); + } + + /** + * + * + *

200 - ok + * @param id The id parameter + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseEntity fileIdGetWithHttpInfo( String id) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return fileIdGetRequestCreation(id).toEntity(localVarReturnType); + } + + /** + * + * + *

200 - ok + * @param id The id parameter + * @return ResponseSpec + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec fileIdGetWithResponseSpec(String id) throws RestClientResponseException { + return fileIdGetRequestCreation(id); + } + + /** + * + * + *

0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @return Foo + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec fooDtParamGetRequestCreation(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie) throws RestClientResponseException { + Object postBody = null; + // create path and map variables + final Map pathParams = new HashMap<>(); + + pathParams.put("dtParam", dtParam); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap<>(); + final MultiValueMap formParams = new LinkedMultiValueMap<>(); + + localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "dtQuery", dtQuery)); + + cookieParams.putAll(apiClient.parameterToMultiValueMap(null, "dtCookie", dtCookie)); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return apiClient.invokeAPI("/foo/{dtParam}", HttpMethod.GET, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @return Foo + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public Foo fooDtParamGet( java.time.Instant dtParam, java.time.Instant dtQuery, java.time.Instant dtCookie) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return fooDtParamGetRequestCreation(dtParam, dtQuery, dtCookie).body(localVarReturnType); + } + + /** + * + * + *

0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @return ResponseEntity<Foo> + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseEntity fooDtParamGetWithHttpInfo( java.time.Instant dtParam, java.time.Instant dtQuery, java.time.Instant dtCookie) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return fooDtParamGetRequestCreation(dtParam, dtQuery, dtCookie).toEntity(localVarReturnType); + } + + /** + * + * + *

0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @return ResponseSpec + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec fooDtParamGetWithResponseSpec(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie) throws RestClientResponseException { + return fooDtParamGetRequestCreation(dtParam, dtQuery, dtCookie); + } + + /** + * + * + *

0 - ok + * @param _file The _file parameter + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec uploadPostRequestCreation(@Nullable File _file) throws RestClientResponseException { + Object postBody = null; + // create path and map variables + final Map pathParams = new HashMap<>(); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap<>(); + final MultiValueMap formParams = new LinkedMultiValueMap<>(); + + if (_file != null) + formParams.add("file", new FileSystemResource(_file)); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "multipart/form-data" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return apiClient.invokeAPI("/upload", HttpMethod.POST, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

0 - ok + * @param _file The _file parameter + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public void uploadPost(@Nullable File _file) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + uploadPostRequestCreation(_file).body(localVarReturnType); + } + + /** + * + * + *

0 - ok + * @param _file The _file parameter + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseEntity uploadPostWithHttpInfo(@Nullable File _file) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return uploadPostRequestCreation(_file).toEntity(localVarReturnType); + } + + /** + * + * + *

0 - ok + * @param _file The _file parameter + * @return ResponseSpec + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec uploadPostWithResponseSpec(@Nullable File _file) throws RestClientResponseException { + return uploadPostRequestCreation(_file); + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/package-info.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/package-info.java new file mode 100644 index 000000000000..6d0d02339408 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package org.openapitools.client.api; diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java new file mode 100644 index 000000000000..e8889c30d615 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java @@ -0,0 +1,75 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.auth; + +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class ApiKeyAuth implements Authentication { + private final String location; + private final String paramName; + + private String apiKey; + private String apiKeyPrefix; + + public ApiKeyAuth(String location, String paramName) { + this.location = location; + this.paramName = paramName; + } + + public String getLocation() { + return location; + } + + public String getParamName() { + return paramName; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getApiKeyPrefix() { + return apiKeyPrefix; + } + + public void setApiKeyPrefix(String apiKeyPrefix) { + this.apiKeyPrefix = apiKeyPrefix; + } + + @Override + public void applyToParams(MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams) { + if (apiKey == null) { + return; + } + String value; + if (apiKeyPrefix != null) { + value = apiKeyPrefix + " " + apiKey; + } else { + value = apiKey; + } + if (location.equals("query")) { + queryParams.add(paramName, value); + } else if (location.equals("header")) { + headerParams.add(paramName, value); + } else if (location.equals("cookie")) { + cookieParams.add(paramName, value); + } + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java new file mode 100644 index 000000000000..5625ecc76ed8 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java @@ -0,0 +1,29 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.auth; + +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public interface Authentication { + /** + * Apply authentication settings to header and / or query parameters. + * + * @param queryParams The query parameters for the request + * @param headerParams The header parameters for the request + * @param cookieParams The cookie parameters for the request + */ + void applyToParams(MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams); +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java new file mode 100644 index 000000000000..12c04ffa1e0d --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java @@ -0,0 +1,51 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.auth; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class HttpBasicAuth implements Authentication { + private String username; + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public void applyToParams(MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams) { + if (username == null && password == null) { + return; + } + String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); + headerParams.add(HttpHeaders.AUTHORIZATION, "Basic " + Base64.getEncoder().encodeToString(str.getBytes(StandardCharsets.UTF_8))); + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java new file mode 100644 index 000000000000..de15b5d3acfd --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java @@ -0,0 +1,69 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.auth; + +import java.util.Optional; +import java.util.function.Supplier; +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class HttpBearerAuth implements Authentication { + private final String scheme; + private Supplier tokenSupplier; + + public HttpBearerAuth(String scheme) { + this.scheme = scheme; + } + + /** + * Gets the token, which together with the scheme, will be sent as the value of the Authorization header. + * + * @return The bearer token + */ + public String getBearerToken() { + return tokenSupplier.get(); + } + + /** + * Sets the token, which together with the scheme, will be sent as the value of the Authorization header. + * + * @param bearerToken The bearer token to send in the Authorization header + */ + public void setBearerToken(String bearerToken) { + this.tokenSupplier = () -> bearerToken; + } + + /** + * Sets the supplier of tokens, which together with the scheme, will be sent as the value of the Authorization header. + * + * @param tokenSupplier The supplier of bearer tokens to send in the Authorization header + */ + public void setBearerToken(Supplier tokenSupplier) { + this.tokenSupplier = tokenSupplier; + } + + @Override + public void applyToParams(MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams) { + String bearerToken = Optional.ofNullable(tokenSupplier).map(Supplier::get).orElse(null); + if (bearerToken == null) { + return; + } + headerParams.add(HttpHeaders.AUTHORIZATION, (scheme != null ? upperCaseBearer(scheme) + " " : "") + bearerToken); + } + + private static String upperCaseBearer(String scheme) { + return ("bearer".equalsIgnoreCase(scheme)) ? "Bearer" : scheme; + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java new file mode 100644 index 000000000000..4d374ab90bdd --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java @@ -0,0 +1,285 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.io.File; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * Foo + */ +@JsonPropertyOrder({ + Foo.JSON_PROPERTY_DT, + Foo.JSON_PROPERTY_BINARY, + Foo.JSON_PROPERTY_LIST_OF_DT, + Foo.JSON_PROPERTY_LIST_MIN_INTEMS, + Foo.JSON_PROPERTY_REQUIRED_DT, + Foo.JSON_PROPERTY_NUMBER +}) +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class Foo { + public static final String JSON_PROPERTY_DT = "dt"; + + private java.time.@Nullable Instant dt; + + public static final String JSON_PROPERTY_BINARY = "binary"; + + private @Nullable File binary; + + public static final String JSON_PROPERTY_LIST_OF_DT = "listOfDt"; + + private List listOfDt; + + public static final String JSON_PROPERTY_LIST_MIN_INTEMS = "listMinIntems"; + + private List listMinIntems; + + public static final String JSON_PROPERTY_REQUIRED_DT = "requiredDt"; + + private java.time.Instant requiredDt; + + public static final String JSON_PROPERTY_NUMBER = "number"; + + private java.math.@Nullable BigDecimal number; + + public Foo() { + } + + public Foo dt(java.time.@Nullable Instant dt) { + + this.dt = dt; + return this; + } + + /** + * Get dt + * @return dt + */ + + @JsonProperty(value = JSON_PROPERTY_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getDt() { + return java.util.Optional.ofNullable(dt); + } + + + @JsonProperty(value = JSON_PROPERTY_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDt(java.time.@Nullable Instant dt) { + this.dt = dt; + } + + public Foo binary(@Nullable File binary) { + + this.binary = binary; + return this; + } + + /** + * Get binary + * @return binary + */ + + @JsonProperty(value = JSON_PROPERTY_BINARY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional<@Nullable File> getBinary() { + return java.util.Optional.ofNullable(binary); + } + + + @JsonProperty(value = JSON_PROPERTY_BINARY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBinary(@Nullable File binary) { + this.binary = binary; + } + + public Foo listOfDt(List listOfDt) { + + this.listOfDt = listOfDt; + return this; + } + + public Foo addListOfDtItem(java.time.Instant listOfDtItem) { + if (this.listOfDt == null) { + this.listOfDt = new ArrayList<>(); + } + this.listOfDt.add(listOfDtItem); + return this; + } + + /** + * Get listOfDt + * @return listOfDt + */ + + @JsonProperty(value = JSON_PROPERTY_LIST_OF_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional> getListOfDt() { + return java.util.Optional.ofNullable(listOfDt); + } + + + @JsonProperty(value = JSON_PROPERTY_LIST_OF_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setListOfDt(List listOfDt) { + this.listOfDt = listOfDt; + } + + public Foo listMinIntems(List listMinIntems) { + + this.listMinIntems = listMinIntems; + return this; + } + + public Foo addListMinIntemsItem(java.time.Instant listMinIntemsItem) { + if (this.listMinIntems == null) { + this.listMinIntems = new ArrayList<>(); + } + this.listMinIntems.add(listMinIntemsItem); + return this; + } + + /** + * Get listMinIntems + * @return listMinIntems + */ + + @JsonProperty(value = JSON_PROPERTY_LIST_MIN_INTEMS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional> getListMinIntems() { + return java.util.Optional.ofNullable(listMinIntems); + } + + + @JsonProperty(value = JSON_PROPERTY_LIST_MIN_INTEMS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setListMinIntems(List listMinIntems) { + this.listMinIntems = listMinIntems; + } + + public Foo requiredDt(java.time.Instant requiredDt) { + + this.requiredDt = requiredDt; + return this; + } + + /** + * Get requiredDt + * @return requiredDt + */ + + @JsonProperty(value = JSON_PROPERTY_REQUIRED_DT, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public java.time.Instant getRequiredDt() { + return requiredDt; + } + + + @JsonProperty(value = JSON_PROPERTY_REQUIRED_DT, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setRequiredDt(java.time.Instant requiredDt) { + this.requiredDt = requiredDt; + } + + public Foo number(java.math.@Nullable BigDecimal number) { + + this.number = number; + return this; + } + + /** + * Get number + * @return number + */ + + @JsonProperty(value = JSON_PROPERTY_NUMBER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNumber() { + return java.util.Optional.ofNullable(number); + } + + + @JsonProperty(value = JSON_PROPERTY_NUMBER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNumber(java.math.@Nullable BigDecimal number) { + this.number = number; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Foo foo = (Foo) o; + return Objects.equals(this.dt, foo.dt) && + Objects.equals(this.binary, foo.binary) && + Objects.equals(this.listOfDt, foo.listOfDt) && + Objects.equals(this.listMinIntems, foo.listMinIntems) && + Objects.equals(this.requiredDt, foo.requiredDt) && + Objects.equals(this.number, foo.number); + } + + @Override + public int hashCode() { + return Objects.hash(dt, binary, listOfDt, listMinIntems, requiredDt, number); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Foo {\n"); + sb.append(" dt: ").append(toIndentedString(dt)).append("\n"); + sb.append(" binary: ").append(toIndentedString(binary)).append("\n"); + sb.append(" listOfDt: ").append(toIndentedString(listOfDt)).append("\n"); + sb.append(" listMinIntems: ").append(toIndentedString(listMinIntems)).append("\n"); + sb.append(" requiredDt: ").append(toIndentedString(requiredDt)).append("\n"); + sb.append(" number: ").append(toIndentedString(number)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } + +} + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/package-info.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/package-info.java new file mode 100644 index 000000000000..774ca336f509 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package org.openapitools.client.model; diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/package-info.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/package-info.java new file mode 100644 index 000000000000..9c547369c362 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package org.openapitools.client; diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/DefaultApiTest.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/DefaultApiTest.java new file mode 100644 index 000000000000..ba1b11e4c4f5 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/DefaultApiTest.java @@ -0,0 +1,79 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import java.io.File; +import org.openapitools.client.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * API tests for DefaultApi + */ +@Disabled +public class DefaultApiTest { + + private final DefaultApi api = new DefaultApi(); + + + /** + * + * + * + */ + @Test + public void fileIdGetTest() { + String id = null; + api.fileIdGet(id); + + // TODO: test validations + } + + /** + * + * + * + */ + @Test + public void fooDtParamGetTest() { + java.time.Instant dtParam = null; + java.time.Instant dtQuery = null; + java.time.Instant dtCookie = null; + Foo response = api.fooDtParamGet(dtParam, dtQuery, dtCookie); + + // TODO: test validations + } + + /** + * + * + * + */ + @Test + public void uploadPostTest() { + File _file = null; + api.uploadPost(_file); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FooTest.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FooTest.java new file mode 100644 index 000000000000..66ed819a0c83 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FooTest.java @@ -0,0 +1,93 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.io.File; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +/** + * Model tests for Foo + */ +class FooTest { + private final Foo model = new Foo(); + + /** + * Model tests for Foo + */ + @Test + void testFoo() { + // TODO: test Foo + } + + /** + * Test the property 'dt' + */ + @Test + void dtTest() { + // TODO: test dt + } + + /** + * Test the property 'binary' + */ + @Test + void binaryTest() { + // TODO: test binary + } + + /** + * Test the property 'listOfDt' + */ + @Test + void listOfDtTest() { + // TODO: test listOfDt + } + + /** + * Test the property 'listMinIntems' + */ + @Test + void listMinIntemsTest() { + // TODO: test listMinIntems + } + + /** + * Test the property 'requiredDt' + */ + @Test + void requiredDtTest() { + // TODO: test requiredDt + } + + /** + * Test the property 'number' + */ + @Test + void numberTest() { + // TODO: test number + } + +} diff --git a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/EnumTest.java index 05f141a55f26..63be5f4d8d74 100644 --- a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/HealthCheckResult.java index ef033ab05fc7..a38b91d108aa 100644 --- a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/NullableClass.java index b55b00c8de99..5056076300cb 100644 --- a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/NullableClass.java @@ -126,7 +126,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -159,7 +159,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -192,7 +192,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -225,7 +225,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -258,7 +258,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -291,7 +291,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -336,7 +336,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -381,7 +381,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -459,7 +459,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -504,7 +504,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/ParentWithNullable.java index d05630d2c3bf..c2ce75a43f62 100644 --- a/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/resteasy/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.github/workflows/maven.yml b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.github/workflows/maven.yml new file mode 100644 index 000000000000..4cdd3d63e3e4 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.github/workflows/maven.yml @@ -0,0 +1,30 @@ +# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven +# +# This file is auto-generated by OpenAPI Generator (https://openapi-generator.tech) + +name: Java CI with Maven + +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] + +jobs: + build: + name: Build jspecify + runs-on: ubuntu-latest + strategy: + matrix: + java: [ 17, 21 ] + steps: + - uses: actions/checkout@v4 + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java }} + distribution: 'temurin' + cache: maven + - name: Build with Maven + run: mvn -B package --no-transfer-progress --file pom.xml diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.gitignore b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.gitignore new file mode 100644 index 000000000000..a530464afa1b --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.gitignore @@ -0,0 +1,21 @@ +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# exclude jar for gradle wrapper +!gradle/wrapper/*.jar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +# build files +**/target +target +.gradle +build diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator-ignore b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.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/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES new file mode 100644 index 000000000000..56926e5b1c76 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES @@ -0,0 +1,35 @@ +.github/workflows/maven.yml +.gitignore +.travis.yml +README.md +api/openapi.yaml +build.gradle +build.sbt +docs/DefaultApi.md +docs/Foo.md +git_push.sh +gradle.properties +gradle/wrapper/gradle-wrapper.jar +gradle/wrapper/gradle-wrapper.properties +gradlew +gradlew.bat +pom.xml +settings.gradle +src/main/AndroidManifest.xml +src/main/java/org/openapitools/client/ApiClient.java +src/main/java/org/openapitools/client/BaseApi.java +src/main/java/org/openapitools/client/JavaTimeFormatter.java +src/main/java/org/openapitools/client/RFC3339DateFormat.java +src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java +src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java +src/main/java/org/openapitools/client/ServerConfiguration.java +src/main/java/org/openapitools/client/ServerVariable.java +src/main/java/org/openapitools/client/api/DefaultApi.java +src/main/java/org/openapitools/client/api/package-info.java +src/main/java/org/openapitools/client/auth/ApiKeyAuth.java +src/main/java/org/openapitools/client/auth/Authentication.java +src/main/java/org/openapitools/client/auth/HttpBasicAuth.java +src/main/java/org/openapitools/client/auth/HttpBearerAuth.java +src/main/java/org/openapitools/client/model/Foo.java +src/main/java/org/openapitools/client/model/package-info.java +src/main/java/org/openapitools/client/package-info.java diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION new file mode 100644 index 000000000000..186c33c96ed8 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.24.0-SNAPSHOT diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.travis.yml b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.travis.yml new file mode 100644 index 000000000000..1b6741c083c7 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.travis.yml @@ -0,0 +1,22 @@ +# +# Generated by OpenAPI Generator: https://openapi-generator.tech +# +# Ref: https://docs.travis-ci.com/user/languages/java/ +# +language: java +jdk: + - openjdk12 + - openjdk11 + - openjdk10 + - openjdk9 + - openjdk8 +before_install: + # ensure gradlew has proper permission + - chmod a+x ./gradlew +script: + # test using maven + #- mvn test + # test using gradle + - gradle test + # test using sbt + # - sbt test diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/README.md b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/README.md new file mode 100644 index 000000000000..3391b5009c7b --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/README.md @@ -0,0 +1,140 @@ +# petstore-resttemplate-optional-getters + +jspecify + +- API version: 1.0.0 + +- Generator version: 7.24.0-SNAPSHOT + +test fully qualified name and jspecify + + +*Automatically generated by the [OpenAPI Generator](https://openapi-generator.tech)* + +## Requirements + +Building the API client library requires: + +1. Java 1.8+ +2. Maven/Gradle + +## Installation + +To install the API client library to your local Maven repository, simply execute: + +```shell +mvn clean install +``` + +To deploy it to a remote Maven repository instead, configure the settings of the repository and execute: + +```shell +mvn clean deploy +``` + +Refer to the [OSSRH Guide](http://central.sonatype.org/pages/ossrh-guide.html) for more information. + +### Maven users + +Add this dependency to your project's POM: + +```xml + + org.openapitools + petstore-resttemplate-optional-getters + 1.0.0 + compile + +``` + +### Gradle users + +Add this dependency to your project's build file: + +```groovy + repositories { + mavenCentral() // Needed if the 'petstore-resttemplate-optional-getters' jar has been published to maven central. + mavenLocal() // Needed if the 'petstore-resttemplate-optional-getters' jar has been published to the local maven repo. + } + + dependencies { + implementation "org.openapitools:petstore-resttemplate-optional-getters:1.0.0" + } +``` + +### Others + +At first generate the JAR by executing: + +```shell +mvn clean package +``` + +Then manually install the following JARs: + +- `target/petstore-resttemplate-optional-getters-1.0.0.jar` +- `target/lib/*.jar` + +## Getting Started + +Please follow the [installation](#installation) instruction and execute the following Java code: + +```java + +import org.openapitools.client.*; +import org.openapitools.client.auth.*; +import org.openapitools.client.model.*; +import org.openapitools.client.api.DefaultApi; + +public class DefaultApiExample { + + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + DefaultApi apiInstance = new DefaultApi(defaultClient); + String id = "id_example"; // String | + try { + apiInstance.fileIdGet(id); + } catch (ApiException e) { + System.err.println("Exception when calling DefaultApi#fileIdGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} + +``` + +## Documentation for API Endpoints + +All URIs are relative to *http://localhost* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*DefaultApi* | [**fileIdGet**](docs/DefaultApi.md#fileIdGet) | **GET** /file/{id} | +*DefaultApi* | [**fooDtParamGet**](docs/DefaultApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | +*DefaultApi* | [**uploadPost**](docs/DefaultApi.md#uploadPost) | **POST** /upload | + + +## Documentation for Models + + - [Foo](docs/Foo.md) + + + +## Documentation for Authorization + +Endpoints do not require authorization. + + +## Recommendation + +It's recommended to create an instance of `ApiClient` per thread in a multithreaded environment to avoid any potential issues. + +## Author + + + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml new file mode 100644 index 000000000000..14c4c1ed2afc --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml @@ -0,0 +1,119 @@ +openapi: 3.0.0 +info: + description: test fully qualified name and jspecify + title: jspecify + version: 1.0.0 +servers: +- url: / +paths: + /foo/{dtParam}: + get: + parameters: + - explode: false + in: path + name: dtParam + required: false + schema: + format: date-time + type: string + style: simple + - explode: true + in: query + name: dtQuery + required: false + schema: + format: date-time + type: string + style: form + - explode: true + in: cookie + name: dtCookie + required: false + schema: + format: date-time + type: string + style: form + responses: + default: + content: + application/json: + schema: + $ref: "#/components/schemas/Foo" + description: response + x-accepts: + - application/json + /upload: + post: + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/_upload_post_request" + description: file + responses: + default: + description: ok + x-content-type: multipart/form-data + x-accepts: + - application/json + /file/{id}: + get: + parameters: + - explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + responses: + "200": + description: ok + x-accepts: + - application/json +components: + schemas: + Foo: + example: + dt: 2000-01-23T04:56:07.000+00:00 + binary: "" + listOfDt: + - 2000-01-23T04:56:07.000+00:00 + - 2000-01-23T04:56:07.000+00:00 + listMinIntems: + - 2000-01-23T04:56:07.000+00:00 + - 2000-01-23T04:56:07.000+00:00 + requiredDt: 2000-01-23T04:56:07.000+00:00 + number: 0.8008281904610115 + properties: + dt: + format: date-time + type: string + binary: + format: binary + type: string + listOfDt: + items: + format: date-time + type: string + type: array + listMinIntems: + items: + format: date-time + type: string + minItems: 1 + type: array + requiredDt: + format: date-time + type: string + number: + type: number + required: + - requiredDt + _upload_post_request: + properties: + file: + format: binary + type: string + type: object + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/build.gradle b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/build.gradle new file mode 100644 index 000000000000..7af3c77fccba --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/build.gradle @@ -0,0 +1,134 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + +group = 'org.openapitools' +version = '1.0.0' + +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:1.5.+' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' + } +} + +repositories { + mavenCentral() +} + + +if(hasProperty('target') && target == 'android') { + + apply plugin: 'com.android.library' + apply plugin: 'com.github.dcendents.android-maven' + + android { + compileSdkVersion 23 + buildToolsVersion '23.0.2' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 22 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } + + dependencies { + provided "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version" + } + } + + afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDirectory + task.destinationDirectory = project.file("${project.buildDir}/outputs/jar") + task.archiveFileName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } + } + + task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + archiveClassifier = 'sources' + } + + artifacts { + archives sourcesJar + } + +} else { + + apply plugin: 'java' + apply plugin: 'maven-publish' + + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + + publishing { + publications { + maven(MavenPublication) { + artifactId = 'petstore-resttemplate-optional-getters' + from components.java + } + } + } + + task execute(type:JavaExec) { + mainClass = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath + } +} + +ext { + jackson_version = "3.1.0" + jackson_annotations_version = "2.21" + spring_web_version = "7.0.5" + jakarta_annotation_version = "3.0.0" + bean_validation_version = "3.1.1" + jodatime_version = "2.9.9" + junit_version = "5.10.2" +} + +dependencies { + implementation "org.springframework:spring-web:$spring_web_version" + implementation "org.springframework:spring-context:$spring_web_version" + implementation "tools.jackson.core:jackson-core:$jackson_version" + implementation "com.fasterxml.jackson.core:jackson-annotations:$jackson_annotations_version" + implementation "tools.jackson.core:jackson-databind:$jackson_version" + implementation "tools.jackson.jakarta.rs:jackson-jakarta-rs-json-provider:$jackson_version" + implementation "org.jspecify:jspecify:1.0.0" + implementation "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version" + testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit_version" +} + +test { + // Enable JUnit 5 (Gradle 4.6+). + useJUnitPlatform() + + // Always run tests, even when nothing changed. + dependsOn 'cleanTest' + + // Show test results. + testLogging { + events "passed", "skipped", "failed" + } + +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/build.sbt b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/build.sbt new file mode 100644 index 000000000000..464090415c47 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/build.sbt @@ -0,0 +1 @@ +# TODO diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/DefaultApi.md b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/DefaultApi.md new file mode 100644 index 000000000000..7a0ddb006a06 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/DefaultApi.md @@ -0,0 +1,205 @@ +# DefaultApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**fileIdGet**](DefaultApi.md#fileIdGet) | **GET** /file/{id} | | +| [**fooDtParamGet**](DefaultApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | | +| [**uploadPost**](DefaultApi.md#uploadPost) | **POST** /upload | | + + + +## fileIdGet + +> fileIdGet(id) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.DefaultApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + DefaultApi apiInstance = new DefaultApi(defaultClient); + String id = "id_example"; // String | + try { + apiInstance.fileIdGet(id); + } catch (ApiException e) { + System.err.println("Exception when calling DefaultApi#fileIdGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **id** | **String**| | | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | ok | - | + + +## fooDtParamGet + +> Foo fooDtParamGet(dtParam, dtQuery, dtCookie) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.DefaultApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + DefaultApi apiInstance = new DefaultApi(defaultClient); + java.time.Instant dtParam = new java.time.Instant(); // java.time.Instant | + java.time.Instant dtQuery = new java.time.Instant(); // java.time.Instant | + java.time.Instant dtCookie = new java.time.Instant(); // java.time.Instant | + try { + Foo result = apiInstance.fooDtParamGet(dtParam, dtQuery, dtCookie); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling DefaultApi#fooDtParamGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **dtParam** | **java.time.Instant**| | [optional] | +| **dtQuery** | **java.time.Instant**| | [optional] | +| **dtCookie** | **java.time.Instant**| | [optional] | + +### Return type + +[**Foo**](Foo.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | response | - | + + +## uploadPost + +> uploadPost(_file) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.DefaultApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + DefaultApi apiInstance = new DefaultApi(defaultClient); + File _file = new File("/path/to/file"); // File | + try { + apiInstance.uploadPost(_file); + } catch (ApiException e) { + System.err.println("Exception when calling DefaultApi#uploadPost"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **_file** | **File**| | [optional] | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: multipart/form-data +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | ok | - | + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md new file mode 100644 index 000000000000..d03d21cd097d --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md @@ -0,0 +1,18 @@ + + +# Foo + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**dt** | **java.time.Instant** | | [optional] | +|**binary** | **File** | | [optional] | +|**listOfDt** | **List<java.time.Instant>** | | [optional] | +|**listMinIntems** | **List<java.time.Instant>** | | [optional] | +|**requiredDt** | **java.time.Instant** | | | +|**number** | **java.math.BigDecimal** | | [optional] | + + + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/git_push.sh b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/git_push.sh new file mode 100644 index 000000000000..f53a75d4fabe --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/git_push.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=$(git remote) +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradle.properties b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradle.properties new file mode 100644 index 000000000000..a3408578278a --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradle.properties @@ -0,0 +1,6 @@ +# This file is automatically generated by OpenAPI Generator (https://github.com/openAPITools/openapi-generator). +# To include other gradle properties as part of the code generation process, please use the `gradleProperties` option. +# +# Gradle properties reference: https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties +# For example, uncomment below to build for Android +#target = android diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.jar b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e6441136f3d4ba8a0da8d277868979cfbc8ad796 GIT binary patch literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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
NnX)EH+Nua)3Y(c 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 '} +case $link in #( +/*) app_path=$link ;; #( +*) app_path=$APP_HOME$link ;; +esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { +echo "$*" +} >&2 + +die () { +echo +echo "$*" +echo +exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( +CYGWIN* ) cygwin=true ;; #( +Darwin* ) darwin=true ;; #( +MSYS* | MINGW* ) msys=true ;; #( +NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then +if [ -x "$JAVA_HOME/jre/sh/java" ] ; then +# IBM's JDK on AIX uses strange locations for the executables +JAVACMD=$JAVA_HOME/jre/sh/java +else +JAVACMD=$JAVA_HOME/bin/java +fi +if [ ! -x "$JAVACMD" ] ; then +die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi +else +JAVACMD=java +if ! command -v java >/dev/null 2>&1 +then +die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then +case $MAX_FD in #( +max*) +# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. +# shellcheck disable=SC2039,SC3045 +MAX_FD=$( ulimit -H -n ) || +warn "Could not query maximum file descriptor limit" +esac +case $MAX_FD in #( +'' | soft) :;; #( +*) +# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. +# shellcheck disable=SC2039,SC3045 +ulimit -n "$MAX_FD" || +warn "Could not set maximum file descriptor limit to $MAX_FD" +esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then +APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) +CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + +JAVACMD=$( cygpath --unix "$JAVACMD" ) + +# Now convert the arguments - kludge to limit ourselves to /bin/sh +for arg do +if +case $arg in #( +-*) false ;; # don't mess with options #( +/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath +[ -e "$t" ] ;; #( +*) false ;; +esac +then +arg=$( cygpath --path --ignore --mixed "$arg" ) +fi +# Roll the args list around exactly as many times as the number of +# args, so each arg winds up back in the position where it started, but +# possibly modified. +# +# NB: a `for` loop captures its iteration list before it begins, so +# changing the positional parameters here affects neither the number of +# iterations, nor the values presented in `arg`. +shift # remove old arg +set -- "$@" "$arg" # push replacement arg +done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ +"-Dorg.gradle.appname=$APP_BASE_NAME" \ +-classpath "$CLASSPATH" \ +org.gradle.wrapper.GradleWrapperMain \ +"$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then +die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( +printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | +xargs -n1 | +sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | +tr '\n' ' ' +)" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradlew.bat b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradlew.bat new file mode 100644 index 000000000000..25da30dbdeee --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/pom.xml b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/pom.xml new file mode 100644 index 000000000000..dd9c6576068d --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/pom.xml @@ -0,0 +1,276 @@ + + 4.0.0 + org.openapitools + petstore-resttemplate-optional-getters + jar + petstore-resttemplate-optional-getters + 1.0.0 + https://github.com/openapitools/openapi-generator + OpenAPI Java + + scm:git:git@github.com:openapitools/openapi-generator.git + scm:git:git@github.com:openapitools/openapi-generator.git + https://github.com/openapitools/openapi-generator + + + + + Unlicense + http://unlicense.org + repo + + + + + + OpenAPI-Generator Contributors + team@openapitools.org + OpenAPITools.org + http://openapitools.org + + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.4.0 + + + enforce-maven + + enforce + + + + + 2.2.0 + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.1.2 + + + + loggerPath + conf/log4j.properties + + + -Xms512m -Xmx1500m + methods + false + true + + + + + org.junit.jupiter + junit-jupiter-engine + ${junit-version} + + + + + maven-dependency-plugin + + + package + + copy-dependencies + + + ${project.build.directory}/lib + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + + test-jar + + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.4.0 + + + add_sources + generate-sources + + add-source + + + + src/main/java + + + + + add_test_sources + generate-test-sources + + add-test-source + + + + src/test/java + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 17 + 17 + 17 + 17 + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.5.0 + + none + + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.3.0 + + + attach-sources + + jar-no-fork + + + + + + + + + + sign-artifacts + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + + + + + + + + + org.springframework + spring-web + ${spring-web-version} + + + org.springframework + spring-context + ${spring-web-version} + + + + + tools.jackson.core + jackson-core + ${jackson-version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson-annotations-version} + + + tools.jackson.core + jackson-databind + ${jackson-version} + + + tools.jackson.jakarta.rs + jackson-jakarta-rs-json-provider + ${jackson-version} + + + + jakarta.annotation + jakarta.annotation-api + ${jakarta-annotation-version} + provided + + + org.jspecify + jspecify + 1.0.0 + + + + + org.junit.jupiter + junit-jupiter-engine + ${junit-version} + test + + + + UTF-8 + + 7.0.5 + 3.1.0 + 3.0.0 + + 2.21 + 5.10.2 + + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/settings.gradle b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/settings.gradle new file mode 100644 index 000000000000..910757f44123 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/settings.gradle @@ -0,0 +1 @@ +rootProject.name = "petstore-resttemplate-optional-getters" \ No newline at end of file diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/AndroidManifest.xml b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/AndroidManifest.xml new file mode 100644 index 000000000000..54fbcb3da1e8 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java new file mode 100644 index 000000000000..21fc9847741d --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java @@ -0,0 +1,808 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpRequest; +import org.springframework.http.HttpStatus; +import org.springframework.http.InvalidMediaTypeException; +import org.springframework.http.MediaType; +import org.springframework.http.RequestEntity; +import org.springframework.http.RequestEntity.BodyBuilder; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.BufferingClientHttpRequestFactory; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; +import org.springframework.web.util.DefaultUriBuilderFactory; + + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.text.DateFormat; +import java.text.ParseException; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TimeZone; +import java.util.function.Supplier; +import java.time.OffsetDateTime; + +import org.openapitools.client.auth.Authentication; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class ApiClient extends JavaTimeFormatter { + public enum CollectionFormat { + CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null); + + protected final String separator; + + CollectionFormat(String separator) { + this.separator = separator; + } + + protected String collectionToString(Collection collection) { + return StringUtils.collectionToDelimitedString(collection, separator); + } + } + + protected boolean debugging = false; + + protected HttpHeaders defaultHeaders = new HttpHeaders(); + protected MultiValueMap defaultCookies = new LinkedMultiValueMap(); + + protected int maxAttemptsForRetry = 1; + + protected long waitTimeMillis = 10; + + protected String basePath = "http://localhost"; + + protected RestTemplate restTemplate; + + protected Map authentications; + + protected DateFormat dateFormat; + + public ApiClient() { + this.restTemplate = buildRestTemplate(); + init(); + } + + public ApiClient(RestTemplate restTemplate) { + this.restTemplate = restTemplate; + init(); + } + + protected void init() { + // Use RFC3339 format for date and datetime. + // See http://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14 + this.dateFormat = new RFC3339DateFormat(); + + // Use UTC as the default time zone. + this.dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + + // Set default User-Agent. + setUserAgent("OpenAPI-Generator/1.0.0/java"); + + // Setup authentications (key: authentication name, value: authentication). + authentications = new HashMap(); + // Prevent the authentications from being modified. + authentications = Collections.unmodifiableMap(authentications); + } + + /** + * Get the current base path + * + * @return String the base path + */ + public String getBasePath() { + return basePath; + } + + /** + * Set the base path, which should include the host + * + * @param basePath the base path + * @return ApiClient this client + */ + public ApiClient setBasePath(String basePath) { + this.basePath = basePath; + return this; + } + + /** + * Get the max attempts for retry + * + * @return int the max attempts + */ + public int getMaxAttemptsForRetry() { + return maxAttemptsForRetry; + } + + /** + * Set the max attempts for retry + * + * @param maxAttemptsForRetry the max attempts for retry + * @return ApiClient this client + */ + public ApiClient setMaxAttemptsForRetry(int maxAttemptsForRetry) { + this.maxAttemptsForRetry = maxAttemptsForRetry; + return this; + } + + /** + * Get the wait time in milliseconds + * + * @return long wait time in milliseconds + */ + public long getWaitTimeMillis() { + return waitTimeMillis; + } + + /** + * Set the wait time in milliseconds + * + * @param waitTimeMillis the wait time in milliseconds + * @return ApiClient this client + */ + public ApiClient setWaitTimeMillis(long waitTimeMillis) { + this.waitTimeMillis = waitTimeMillis; + return this; + } + + /** + * Get authentications (key: authentication name, value: authentication). + * + * @return Map the currently configured authentication types + */ + public Map getAuthentications() { + return authentications; + } + + /** + * Get authentication for the given name. + * + * @param authName The authentication name + * @return The authentication, null if not found + */ + public Authentication getAuthentication(String authName) { + return authentications.get(authName); + } + + + + + + /** + * Set the User-Agent header's value (by adding to the default header map). + * + * @param userAgent the user agent string + * @return ApiClient this client + */ + public ApiClient setUserAgent(String userAgent) { + addDefaultHeader("User-Agent", userAgent); + return this; + } + + /** + * Add a default header. + * + * @param name The header's name + * @param value The header's value + * @return ApiClient this client + */ + public ApiClient addDefaultHeader(String name, String value) { + defaultHeaders.set(name, value); + return this; + } + + /** + * Add a default cookie. + * + * @param name The cookie's name + * @param value The cookie's value + * @return ApiClient this client + */ + public ApiClient addDefaultCookie(String name, String value) { + if (defaultCookies.containsKey(name)) { + defaultCookies.remove(name); + } + defaultCookies.add(name, value); + return this; + } + + public void setDebugging(boolean debugging) { + List currentInterceptors = this.restTemplate.getInterceptors(); + if (debugging) { + if (currentInterceptors == null) { + currentInterceptors = new ArrayList(); + } + ClientHttpRequestInterceptor interceptor = new ApiClientHttpRequestInterceptor(); + currentInterceptors.add(interceptor); + this.restTemplate.setInterceptors(currentInterceptors); + } else { + if (currentInterceptors != null && !currentInterceptors.isEmpty()) { + Iterator iter = currentInterceptors.iterator(); + while (iter.hasNext()) { + ClientHttpRequestInterceptor interceptor = iter.next(); + if (interceptor instanceof ApiClientHttpRequestInterceptor) { + iter.remove(); + } + } + this.restTemplate.setInterceptors(currentInterceptors); + } + } + this.debugging = debugging; + } + + /** + * Check that whether debugging is enabled for this API client. + * @return boolean true if this client is enabled for debugging, false otherwise + */ + public boolean isDebugging() { + return debugging; + } + + /** + * Get the date format used to parse/format date parameters. + * @return DateFormat format + */ + public DateFormat getDateFormat() { + return dateFormat; + } + + /** + * Set the date format used to parse/format date parameters. + * @param dateFormat Date format + * @return API client + */ + public ApiClient setDateFormat(DateFormat dateFormat) { + this.dateFormat = dateFormat; + return this; + } + + /** + * Parse the given string into Date object. + * + * @param str the string to parse + * @return the Date parsed from the string + */ + public Date parseDate(String str) { + try { + return dateFormat.parse(str); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + + /** + * Format the given Date object into string. + * + * @param date the date to format + * @return the formatted date as string + */ + public String formatDate(Date date) { + return dateFormat.format(date); + } + + /** + * Format the given parameter object into string. + * + * @param param the object to convert + * @return String the parameter represented as a String + */ + public String parameterToString(Object param) { + if (param == null) { + return ""; + } else if (param instanceof Date) { + return formatDate( (Date) param); + } else if (param instanceof OffsetDateTime) { + return formatOffsetDateTime((OffsetDateTime) param); + } else if (param instanceof Collection) { + StringBuilder b = new StringBuilder(); + for (Object o : (Collection) param) { + if (b.length() > 0) { + b.append(","); + } + b.append(String.valueOf(o)); + } + return b.toString(); + } else { + return String.valueOf(param); + } + } + + /** + * Formats the specified collection path parameter to a string value. + * + * @param collectionFormat The collection format of the parameter. + * @param values The values of the parameter. + * @return String representation of the parameter + */ + public String collectionPathParameterToString(CollectionFormat collectionFormat, Collection values) { + // create the value based on the collection format + if (CollectionFormat.MULTI.equals(collectionFormat)) { + // not valid for path params + return parameterToString(values); + } + + // collectionFormat is assumed to be "csv" by default + if (collectionFormat == null) { + collectionFormat = CollectionFormat.CSV; + } + + return collectionFormat.collectionToString(values); + } + + /** + * Converts a parameter to a {@link MultiValueMap} for use in REST requests + * + * @param collectionFormat The format to convert to + * @param name The name of the parameter + * @param value The parameter's value + * @return a Map containing the String value(s) of the input parameter + */ + public MultiValueMap parameterToMultiValueMap(CollectionFormat collectionFormat, String name, Object value) { + final MultiValueMap params = new LinkedMultiValueMap(); + + if (name == null || name.isEmpty() || value == null) { + return params; + } + + if (collectionFormat == null) { + collectionFormat = CollectionFormat.CSV; + } + + if (value instanceof Map) { + @SuppressWarnings("unchecked") + final Map valuesMap = (Map) value; + for (final Entry entry : valuesMap.entrySet()) { + params.add(entry.getKey(), parameterToString(entry.getValue())); + } + return params; + } + + Collection valueCollection = null; + if (value instanceof Collection) { + valueCollection = (Collection) value; + } else { + params.add(name, parameterToString(value)); + return params; + } + + if (valueCollection.isEmpty()) { + return params; + } + + if (collectionFormat.equals(CollectionFormat.MULTI)) { + for (Object item : valueCollection) { + params.add(name, parameterToString(item)); + } + return params; + } + + List values = new ArrayList(); + for (Object o : valueCollection) { + values.add(parameterToString(o)); + } + params.add(name, collectionFormat.collectionToString(values)); + + return params; + } + + /** + * Check if the given {@code String} is a JSON MIME. + * + * @param mediaType the input MediaType + * @return boolean true if the MediaType represents JSON, false otherwise + */ + public boolean isJsonMime(String mediaType) { + // "* / *" is default to JSON + if ("*/*".equals(mediaType)) { + return true; + } + + try { + return isJsonMime(MediaType.parseMediaType(mediaType)); + } catch (InvalidMediaTypeException e) { + } + return false; + } + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + * + * @param mediaType the input MediaType + * @return boolean true if the MediaType represents JSON, false otherwise + */ + public boolean isJsonMime(MediaType mediaType) { + return mediaType != null && (MediaType.APPLICATION_JSON.isCompatibleWith(mediaType) || mediaType.getSubtype().matches("^.*\\+json[;]?\\s*$")); + } + + /** + * Check if the given {@code String} is a Problem JSON MIME (RFC-7807). + * + * @param mediaType the input MediaType + * @return boolean true if the MediaType represents Problem JSON, false otherwise + */ + public boolean isProblemJsonMime(String mediaType) { + return "application/problem+json".equalsIgnoreCase(mediaType); + } + + /** + * Select the Accept header's value from the given accepts array: + * if JSON exists in the given array, use it; + * otherwise use all of them (joining into a string) + * + * @param accepts The accepts array to select from + * @return List The list of MediaTypes to use for the Accept header + */ + public List selectHeaderAccept(String[] accepts) { + if (accepts.length == 0) { + return null; + } + for (String accept : accepts) { + MediaType mediaType = MediaType.parseMediaType(accept); + if (isJsonMime(mediaType) && !isProblemJsonMime(accept)) { + return Collections.singletonList(mediaType); + } + } + return MediaType.parseMediaTypes(StringUtils.arrayToCommaDelimitedString(accepts)); + } + + /** + * Select the Content-Type header's value from the given array: + * if JSON exists in the given array, use it; + * otherwise use the first one of the array. + * + * @param contentTypes The Content-Type array to select from + * @return MediaType The Content-Type header to use. If the given array is empty, JSON will be used. + */ + public MediaType selectHeaderContentType(String[] contentTypes) { + if (contentTypes.length == 0) { + return MediaType.APPLICATION_JSON; + } + for (String contentType : contentTypes) { + MediaType mediaType = MediaType.parseMediaType(contentType); + if (isJsonMime(mediaType)) { + return mediaType; + } + } + return MediaType.parseMediaType(contentTypes[0]); + } + + /** + * Select the body to use for the request + * + * @param obj the body object + * @param formParams the form parameters + * @param contentType the content type of the request + * @return Object the selected body + */ + protected Object selectBody(Object obj, MultiValueMap formParams, MediaType contentType) { + boolean isForm = MediaType.MULTIPART_FORM_DATA.isCompatibleWith(contentType) || MediaType.APPLICATION_FORM_URLENCODED.isCompatibleWith(contentType); + return isForm ? formParams : obj; + } + + /** + * Expand path template with variables + * + * @param pathTemplate path template with placeholders + * @param variables variables to replace + * @return path with placeholders replaced by variables + */ + public String expandPath(String pathTemplate, Map variables) { + return restTemplate.getUriTemplateHandler().expand(pathTemplate, variables).toString(); + } + + /** + * Include queryParams in uriParams taking into account the paramName + * + * @param queryParams The query parameters + * @param uriParams The path parameters + * return templatized query string + */ + public String generateQueryUri(MultiValueMap queryParams, Map uriParams) { + StringBuilder queryBuilder = new StringBuilder(); + queryParams.forEach((name, values) -> { + try { + final String encodedName = URLEncoder.encode(name.toString(), "UTF-8"); + if (CollectionUtils.isEmpty(values)) { + if (queryBuilder.length() != 0) { + queryBuilder.append('&'); + } + queryBuilder.append(encodedName); + } else { + int valueItemCounter = 0; + for (Object value : values) { + if (queryBuilder.length() != 0) { + queryBuilder.append('&'); + } + queryBuilder.append(encodedName); + if (value != null) { + String templatizedKey = encodedName + valueItemCounter++; + uriParams.put(templatizedKey, value.toString()); + queryBuilder.append('=').append("{").append(templatizedKey).append("}"); + } + } + } + } catch (UnsupportedEncodingException e) { + + } + }); + return queryBuilder.toString(); + + } + + /** + * Invoke API by sending HTTP request with the given options. + * + * @param the return type to use + * @param path The sub-path of the HTTP URL + * @param method The request method + * @param pathParams The path parameters + * @param queryParams The query parameters + * @param body The request body object + * @param headerParams The header parameters + * @param cookieParams The cookie parameters + * @param formParams The form parameters + * @param accept The request's Accept header + * @param contentType The request's Content-Type header + * @param authNames The authentications to apply + * @param returnType The return type into which to deserialize the response + * @return ResponseEntity<T> The response of the chosen type + */ + public ResponseEntity invokeAPI(String path, HttpMethod method, Map pathParams, MultiValueMap queryParams, Object body, HttpHeaders headerParams, MultiValueMap cookieParams, MultiValueMap formParams, List accept, MediaType contentType, String[] authNames, ParameterizedTypeReference returnType) throws RestClientException { + updateParamsForAuth(authNames, queryParams, headerParams, cookieParams); + + Map uriParams = new HashMap<>(); + uriParams.putAll(pathParams); + + String finalUri = path; + + if (queryParams != null && !queryParams.isEmpty()) { + //Include queryParams in uriParams taking into account the paramName + String queryUri = generateQueryUri(queryParams, uriParams); + //Append to finalUri the templatized query string like "?param1={param1Value}&....... + finalUri += "?" + queryUri; + } + String expandedPath = this.expandPath(finalUri, uriParams); + final UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(basePath).path(expandedPath); + + URI uri; + try { + uri = new URI(builder.build().toUriString()); + } catch (URISyntaxException ex) { + throw new RestClientException("Could not build URL: " + builder.toUriString(), ex); + } + + final BodyBuilder requestBuilder = RequestEntity.method(method, UriComponentsBuilder.fromUriString(basePath).toUriString() + finalUri, uriParams); + if (accept != null) { + requestBuilder.accept(accept.toArray(new MediaType[accept.size()])); + } + if (contentType != null) { + requestBuilder.contentType(contentType); + } + + addHeadersToRequest(headerParams, requestBuilder); + addHeadersToRequest(defaultHeaders, requestBuilder); + addCookiesToRequest(cookieParams, requestBuilder); + addCookiesToRequest(defaultCookies, requestBuilder); + + RequestEntity requestEntity = requestBuilder.body(selectBody(body, formParams, contentType)); + + ResponseEntity responseEntity = null; + int attempts = 0; + while (attempts < maxAttemptsForRetry) { + try { + responseEntity = restTemplate.exchange(requestEntity, returnType); + break; + } catch (HttpServerErrorException | HttpClientErrorException ex) { + if (ex instanceof HttpServerErrorException + || ex.getStatusCode().equals(HttpStatus.TOO_MANY_REQUESTS)) { + attempts++; + if (attempts < maxAttemptsForRetry) { + try { + Thread.sleep(waitTimeMillis); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } else { + throw ex; + } + } else { + throw ex; + } + } + } + + if (responseEntity == null) { + throw new RestClientException("ResponseEntity is null"); + } + + if (responseEntity.getStatusCode().is2xxSuccessful()) { + return responseEntity; + } else { + // The error handler built into the RestTemplate should handle 400 and 500 series errors. + throw new RestClientException("API returned " + responseEntity.getStatusCode() + " and it wasn't handled by the RestTemplate error handler"); + } + } + + /** + * Add headers to the request that is being built + * @param headers The headers to add + * @param requestBuilder The current request + */ + protected void addHeadersToRequest(HttpHeaders headers, BodyBuilder requestBuilder) { + for (Entry> entry : headers.headerSet()) { + List values = entry.getValue(); + for (String value : values) { + if (value != null) { + requestBuilder.header(entry.getKey(), value); + } + } + } + } + + /** + * Add cookies to the request that is being built + * + * @param cookies The cookies to add + * @param requestBuilder The current request + */ + protected void addCookiesToRequest(MultiValueMap cookies, BodyBuilder requestBuilder) { + if (!cookies.isEmpty()) { + requestBuilder.header("Cookie", buildCookieHeader(cookies)); + } + } + + /** + * Build cookie header. Keeps a single value per cookie (as per + * RFC6265 section 5.3). + * + * @param cookies map all cookies + * @return header string for cookies. + */ + protected String buildCookieHeader(MultiValueMap cookies) { + final StringBuilder cookieValue = new StringBuilder(); + String delimiter = ""; + for (final Map.Entry> entry : cookies.entrySet()) { + final String value = entry.getValue().get(entry.getValue().size() - 1); + cookieValue.append(String.format(java.util.Locale.ROOT, "%s%s=%s", delimiter, entry.getKey(), value)); + delimiter = "; "; + } + return cookieValue.toString(); + } + + /** + * Build the RestTemplate used to make HTTP requests. + * @return RestTemplate + */ + protected RestTemplate buildRestTemplate() { + RestTemplate restTemplate = new RestTemplate(); + // This allows us to read the response more than once - Necessary for debugging. + restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(restTemplate.getRequestFactory())); + + // disable default URL encoding + DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory(); + uriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY); + restTemplate.setUriTemplateHandler(uriBuilderFactory); + return restTemplate; + } + + /** + * Update query and header parameters based on authentication settings. + * + * @param authNames The authentications to apply + * @param queryParams The query parameters + * @param headerParams The header parameters + */ + protected void updateParamsForAuth(String[] authNames, MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams) { + for (String authName : authNames) { + Authentication auth = authentications.get(authName); + if (auth == null) { + throw new RestClientException("Authentication undefined: " + authName); + } + auth.applyToParams(queryParams, headerParams, cookieParams); + } + } + + protected class ApiClientHttpRequestInterceptor implements ClientHttpRequestInterceptor { + protected final Log log = LogFactory.getLog(ApiClientHttpRequestInterceptor.class); + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { + logRequest(request, body); + ClientHttpResponse response = execution.execute(request, body); + logResponse(response); + return response; + } + + protected void logRequest(HttpRequest request, byte[] body) throws UnsupportedEncodingException { + log.info("URI: " + request.getURI()); + log.info("HTTP Method: " + request.getMethod()); + log.info("HTTP Headers: " + headersToString(request.getHeaders())); + log.info("Request Body: " + new String(body, StandardCharsets.UTF_8)); + } + + protected void logResponse(ClientHttpResponse response) throws IOException { + log.info("HTTP Status Code: " + response.getStatusCode().value()); + log.info("Status Text: " + response.getStatusText()); + log.info("HTTP Headers: " + headersToString(response.getHeaders())); + log.info("Response Body: " + bodyToString(response.getBody())); + } + + protected String headersToString(HttpHeaders headers) { + if(headers == null || headers.isEmpty()) { + return ""; + } + StringBuilder builder = new StringBuilder(); + for (Entry> entry : headers.headerSet()) { + builder.append(entry.getKey()).append("=["); + for (String value : entry.getValue()) { + builder.append(value).append(","); + } + builder.setLength(builder.length() - 1); // Get rid of trailing comma + builder.append("],"); + } + builder.setLength(builder.length() - 1); // Get rid of trailing comma + return builder.toString(); + } + + protected String bodyToString(InputStream body) throws IOException { + StringBuilder builder = new StringBuilder(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(body, StandardCharsets.UTF_8)); + String line = bufferedReader.readLine(); + while (line != null) { + builder.append(line).append(System.lineSeparator()); + line = bufferedReader.readLine(); + } + bufferedReader.close(); + return builder.toString(); + } + } +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/BaseApi.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/BaseApi.java new file mode 100644 index 000000000000..c7559b814672 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/BaseApi.java @@ -0,0 +1,87 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import org.springframework.web.client.RestClientException; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public abstract class BaseApi { + + protected ApiClient apiClient; + + public BaseApi() { + this(new ApiClient()); + } + + public BaseApi(ApiClient apiClient) { + this.apiClient = apiClient; + } + + public ApiClient getApiClient() { + return apiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.apiClient = apiClient; + } + + /** + * Directly invoke the API for the given URL. Useful if the API returns direct links/URLs for subsequent requests. + * @param url The URL for the request, either full URL or only the path. + * @param method The HTTP method for the request. + * @return ResponseEntity<Void> + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public ResponseEntity invokeAPI(String url, HttpMethod method) throws RestClientException { + return invokeAPI(url, method, null, new ParameterizedTypeReference() {}); + } + + /** + * Directly invoke the API for the given URL. Useful if the API returns direct links/URLs for subsequent requests. + * @param url The URL for the request, either full URL or only the path. + * @param method The HTTP method for the request. + * @param request The request object. + * @return ResponseEntity<Void> + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public ResponseEntity invokeAPI(String url, HttpMethod method, Object request) throws RestClientException { + return invokeAPI(url, method, request, new ParameterizedTypeReference() {}); + } + + /** + * Directly invoke the API for the given URL. Useful if the API returns direct links/URLs for subsequent requests. + * @param url The URL for the request, either full URL or only the path. + * @param method The HTTP method for the request. + * @param returnType The return type. + * @return ResponseEntity in the specified type. + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public ResponseEntity invokeAPI(String url, HttpMethod method, ParameterizedTypeReference returnType) throws RestClientException { + return invokeAPI(url, method, null, returnType); + } + + /** + * Directly invoke the API for the given URL. Useful if the API returns direct links/URLs for subsequent requests. + * @param url The URL for the request, either full URL or only the path. + * @param method The HTTP method for the request. + * @param request The request object. + * @param returnType The return type. + * @return ResponseEntity in the specified type. + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public abstract ResponseEntity invokeAPI(String url, HttpMethod method, Object request, ParameterizedTypeReference returnType) throws RestClientException; +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java new file mode 100644 index 000000000000..d25e3fc7c76d --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java @@ -0,0 +1,68 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package org.openapitools.client; + +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; + +/** + * Class that add parsing/formatting support for Java 8+ {@code OffsetDateTime} class. + * It's generated for java clients when {@code AbstractJavaCodegen#dateLibrary} specified as {@code java8}. + */ +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class JavaTimeFormatter { + private DateTimeFormatter offsetDateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; + + /** + * Get the date format used to parse/format {@code OffsetDateTime} parameters. + * + * @return DateTimeFormatter + */ + public DateTimeFormatter getOffsetDateTimeFormatter() { + return offsetDateTimeFormatter; + } + + /** + * Set the date format used to parse/format {@code OffsetDateTime} parameters. + * + * @param offsetDateTimeFormatter {@code DateTimeFormatter} + */ + public void setOffsetDateTimeFormatter(DateTimeFormatter offsetDateTimeFormatter) { + this.offsetDateTimeFormatter = offsetDateTimeFormatter; + } + + /** + * Parse the given string into {@code OffsetDateTime} object. + * + * @param str String + * @return {@code OffsetDateTime} + */ + public OffsetDateTime parseOffsetDateTime(String str) { + try { + return OffsetDateTime.parse(str, offsetDateTimeFormatter); + } catch (DateTimeParseException e) { + throw new RuntimeException(e); + } + } + + /** + * Format the given {@code OffsetDateTime} object into string. + * + * @param offsetDateTime {@code OffsetDateTime} + * @return {@code OffsetDateTime} in string format + */ + public String formatOffsetDateTime(OffsetDateTime offsetDateTime) { + return offsetDateTimeFormatter.format(offsetDateTime); + } +} \ No newline at end of file diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java new file mode 100644 index 000000000000..9c82900edf4e --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java @@ -0,0 +1,57 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package org.openapitools.client; + +import java.text.DateFormat; +import java.text.FieldPosition; +import java.text.ParsePosition; +import java.util.Date; +import java.text.DecimalFormat; +import java.util.GregorianCalendar; +import java.util.TimeZone; +import tools.jackson.databind.util.StdDateFormat; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class RFC3339DateFormat extends DateFormat { + private static final long serialVersionUID = 1L; + private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC"); + + private final StdDateFormat fmt = new StdDateFormat() + .withTimeZone(TIMEZONE_Z) + .withColonInTimeZone(true); + + public RFC3339DateFormat() { + this.calendar = new GregorianCalendar(); + this.numberFormat = new DecimalFormat(); + } + + @Override + public Date parse(String source) { + return parse(source, new ParsePosition(0)); + } + + @Override + public Date parse(String source, ParsePosition pos) { + return fmt.parse(source, pos); + } + + @Override + public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { + return fmt.format(date, toAppendTo, fieldPosition); + } + + @Override + public Object clone() { + return super.clone(); + } +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java new file mode 100644 index 000000000000..9756de75911c --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java @@ -0,0 +1,100 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package org.openapitools.client; + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.Temporal; +import java.time.temporal.TemporalAccessor; +import java.util.function.BiFunction; +import java.util.function.Function; + +import tools.jackson.core.JacksonException; +import tools.jackson.core.JsonParser; +import tools.jackson.databind.DeserializationContext; +import tools.jackson.databind.cfg.DateTimeFeature; +import tools.jackson.databind.ext.javatime.deser.InstantDeserializer; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class RFC3339InstantDeserializer extends InstantDeserializer { + private static final long serialVersionUID = 1L; + private final static boolean DEFAULT_NORMALIZE_ZONE_ID = DateTimeFeature.NORMALIZE_DESERIALIZED_ZONE_ID.enabledByDefault(); + private final static boolean DEFAULT_ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS + = DateTimeFeature.ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS.enabledByDefault(); + + public static final RFC3339InstantDeserializer INSTANT = new RFC3339InstantDeserializer<>( + Instant.class, DateTimeFormatter.ISO_INSTANT, + Instant::from, + a -> Instant.ofEpochMilli( a.value ), + a -> Instant.ofEpochSecond( a.integer, a.fraction ), + null, + true, // yes, replace zero offset with Z + DEFAULT_NORMALIZE_ZONE_ID, + DEFAULT_ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS + ); + + public static final RFC3339InstantDeserializer OFFSET_DATE_TIME = new RFC3339InstantDeserializer<>( + OffsetDateTime.class, DateTimeFormatter.ISO_OFFSET_DATE_TIME, + OffsetDateTime::from, + a -> OffsetDateTime.ofInstant( Instant.ofEpochMilli( a.value ), a.zoneId ), + a -> OffsetDateTime.ofInstant( Instant.ofEpochSecond( a.integer, a.fraction ), a.zoneId ), + (d, z) -> ( d.isEqual( OffsetDateTime.MIN ) || d.isEqual( OffsetDateTime.MAX ) ? + d : + d.withOffsetSameInstant( z.getRules().getOffset( d.toLocalDateTime() ) ) ), + true, // yes, replace zero offset with Z + DEFAULT_NORMALIZE_ZONE_ID, + DEFAULT_ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS + ); + + public static final RFC3339InstantDeserializer ZONED_DATE_TIME = new RFC3339InstantDeserializer<>( + ZonedDateTime.class, DateTimeFormatter.ISO_ZONED_DATE_TIME, + ZonedDateTime::from, + a -> ZonedDateTime.ofInstant( Instant.ofEpochMilli( a.value ), a.zoneId ), + a -> ZonedDateTime.ofInstant( Instant.ofEpochSecond( a.integer, a.fraction ), a.zoneId ), + ZonedDateTime::withZoneSameInstant, + false, // keep zero offset and Z separate since zones explicitly supported + DEFAULT_NORMALIZE_ZONE_ID, + DEFAULT_ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS + ); + + protected RFC3339InstantDeserializer( + Class supportedType, + DateTimeFormatter formatter, + Function parsedToValue, + Function fromMilliseconds, + Function fromNanoseconds, + BiFunction adjust, + boolean replaceZeroOffsetAsZ, + boolean normalizeZoneId, + boolean readNumericStringsAsTimestamp) { + super( + supportedType, + formatter, + parsedToValue, + fromMilliseconds, + fromNanoseconds, + adjust, + replaceZeroOffsetAsZ, + normalizeZoneId, + readNumericStringsAsTimestamp + ); + } + + @Override + protected T _fromString(JsonParser p, DeserializationContext ctxt, String string0) throws JacksonException { + return super._fromString(p, ctxt, string0.replace( ' ', 'T' )); + } +} \ No newline at end of file diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java new file mode 100644 index 000000000000..0a0c7f7c929c --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java @@ -0,0 +1,33 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package org.openapitools.client; + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZonedDateTime; + +import tools.jackson.databind.module.SimpleModule; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class RFC3339JavaTimeModule extends SimpleModule { + private static final long serialVersionUID = 1L; + + public RFC3339JavaTimeModule() { + super("RFC3339JavaTimeModule"); + addDeserializer(Instant.class, RFC3339InstantDeserializer.INSTANT); + addDeserializer(OffsetDateTime.class, RFC3339InstantDeserializer.OFFSET_DATE_TIME); + addDeserializer(ZonedDateTime.class, RFC3339InstantDeserializer.ZONED_DATE_TIME); + } + + +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java new file mode 100644 index 000000000000..017652e55155 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java @@ -0,0 +1,72 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import java.util.Map; + +/** + * Representing a Server configuration. + */ +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class ServerConfiguration { + public String URL; + public String description; + public Map variables; + + /** + * @param URL A URL to the target host. + * @param description A description of the host designated by the URL. + * @param variables A map between a variable name and its value. The value is used for substitution in the server's URL template. + */ + public ServerConfiguration(String URL, String description, Map variables) { + this.URL = URL; + this.description = description; + this.variables = variables; + } + + /** + * Format URL template using given variables. + * + * @param variables A map between a variable name and its value. + * @return Formatted URL. + */ + public String URL(Map variables) { + String url = this.URL; + + // go through variables and replace placeholders + for (Map.Entry variable: this.variables.entrySet()) { + String name = variable.getKey(); + ServerVariable serverVariable = variable.getValue(); + String value = serverVariable.defaultValue; + + if (variables != null && variables.containsKey(name)) { + value = variables.get(name); + if (serverVariable.enumValues.size() > 0 && !serverVariable.enumValues.contains(value)) { + throw new IllegalArgumentException("The variable " + name + " in the server URL has invalid value " + value + "."); + } + } + url = url.replace("{" + name + "}", value); + } + return url; + } + + /** + * Format URL template using default server variables. + * + * @return Formatted URL. + */ + public String URL() { + return URL(null); + } +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java new file mode 100644 index 000000000000..0740bf8aa46f --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java @@ -0,0 +1,37 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import java.util.HashSet; + +/** + * Representing a Server Variable for server URL template substitution. + */ +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class ServerVariable { + public String description; + public String defaultValue; + public HashSet enumValues = null; + + /** + * @param description A description for the server variable. + * @param defaultValue The default value to use for substitution. + * @param enumValues An enumeration of string values to be used if the substitution options are from a limited set. + */ + public ServerVariable(String description, String defaultValue, HashSet enumValues) { + this.description = description; + this.defaultValue = defaultValue; + this.enumValues = enumValues; + } +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java new file mode 100644 index 000000000000..2bb43afa0473 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java @@ -0,0 +1,209 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; +import org.openapitools.client.BaseApi; + +import java.io.File; +import org.openapitools.client.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.core.io.FileSystemResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class DefaultApi extends BaseApi { + + public DefaultApi() { + super(new ApiClient()); + } + + public DefaultApi(ApiClient apiClient) { + super(apiClient); + } + + /** + * + * + *

200 - ok + * @param id (required) + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public void fileIdGet(String id) throws RestClientException { + fileIdGetWithHttpInfo(id); + } + + /** + * + * + *

200 - ok + * @param id (required) + * @return ResponseEntity<Void> + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public ResponseEntity fileIdGetWithHttpInfo(String id) throws RestClientException { + Object localVarPostBody = null; + + // verify the required parameter 'id' is set + if (id == null) { + throw new HttpClientErrorException(HttpStatus.BAD_REQUEST, "Missing the required parameter 'id' when calling fileIdGet"); + } + + // create path and map variables + final Map uriVariables = new HashMap(); + uriVariables.put("id", id); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/file/{id}", HttpMethod.GET, uriVariables, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, localReturnType); + } + /** + * + * + *

0 - response + * @param dtParam (optional) + * @param dtQuery (optional) + * @param dtCookie (optional) + * @return Foo + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public Foo fooDtParamGet(java.time.Instant dtParam, java.time.Instant dtQuery, java.time.Instant dtCookie) throws RestClientException { + return fooDtParamGetWithHttpInfo(dtParam, dtQuery, dtCookie).getBody(); + } + + /** + * + * + *

0 - response + * @param dtParam (optional) + * @param dtQuery (optional) + * @param dtCookie (optional) + * @return ResponseEntity<Foo> + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public ResponseEntity fooDtParamGetWithHttpInfo(java.time.Instant dtParam, java.time.Instant dtQuery, java.time.Instant dtCookie) throws RestClientException { + Object localVarPostBody = null; + + // create path and map variables + final Map uriVariables = new HashMap(); + uriVariables.put("dtParam", dtParam); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "dtQuery", dtQuery)); + + + if (dtCookie != null) + localVarCookieParams.add("dtCookie", apiClient.parameterToString(dtCookie)); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/foo/{dtParam}", HttpMethod.GET, uriVariables, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, localReturnType); + } + /** + * + * + *

0 - ok + * @param _file (optional) + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public void uploadPost(File _file) throws RestClientException { + uploadPostWithHttpInfo(_file); + } + + /** + * + * + *

0 - ok + * @param _file (optional) + * @return ResponseEntity<Void> + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public ResponseEntity uploadPostWithHttpInfo(File _file) throws RestClientException { + Object localVarPostBody = null; + + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + if (_file != null) + localVarFormParams.add("file", new FileSystemResource(_file)); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "multipart/form-data" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/upload", HttpMethod.POST, Collections.emptyMap(), localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, localReturnType); + } + + @Override + public ResponseEntity invokeAPI(String url, HttpMethod method, Object request, ParameterizedTypeReference returnType) throws RestClientException { + String localVarPath = url.replace(apiClient.getBasePath(), ""); + Object localVarPostBody = request; + + final Map uriVariables = new HashMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "multipart/form-data" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + return apiClient.invokeAPI(localVarPath, method, uriVariables, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, returnType); + } +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/package-info.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/package-info.java new file mode 100644 index 000000000000..6d0d02339408 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package org.openapitools.client.api; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java new file mode 100644 index 000000000000..e8889c30d615 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java @@ -0,0 +1,75 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.auth; + +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class ApiKeyAuth implements Authentication { + private final String location; + private final String paramName; + + private String apiKey; + private String apiKeyPrefix; + + public ApiKeyAuth(String location, String paramName) { + this.location = location; + this.paramName = paramName; + } + + public String getLocation() { + return location; + } + + public String getParamName() { + return paramName; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getApiKeyPrefix() { + return apiKeyPrefix; + } + + public void setApiKeyPrefix(String apiKeyPrefix) { + this.apiKeyPrefix = apiKeyPrefix; + } + + @Override + public void applyToParams(MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams) { + if (apiKey == null) { + return; + } + String value; + if (apiKeyPrefix != null) { + value = apiKeyPrefix + " " + apiKey; + } else { + value = apiKey; + } + if (location.equals("query")) { + queryParams.add(paramName, value); + } else if (location.equals("header")) { + headerParams.add(paramName, value); + } else if (location.equals("cookie")) { + cookieParams.add(paramName, value); + } + } +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java new file mode 100644 index 000000000000..5625ecc76ed8 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java @@ -0,0 +1,29 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.auth; + +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public interface Authentication { + /** + * Apply authentication settings to header and / or query parameters. + * + * @param queryParams The query parameters for the request + * @param headerParams The header parameters for the request + * @param cookieParams The cookie parameters for the request + */ + void applyToParams(MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams); +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java new file mode 100644 index 000000000000..12c04ffa1e0d --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java @@ -0,0 +1,51 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.auth; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class HttpBasicAuth implements Authentication { + private String username; + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public void applyToParams(MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams) { + if (username == null && password == null) { + return; + } + String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); + headerParams.add(HttpHeaders.AUTHORIZATION, "Basic " + Base64.getEncoder().encodeToString(str.getBytes(StandardCharsets.UTF_8))); + } +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java new file mode 100644 index 000000000000..de15b5d3acfd --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java @@ -0,0 +1,69 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.auth; + +import java.util.Optional; +import java.util.function.Supplier; +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class HttpBearerAuth implements Authentication { + private final String scheme; + private Supplier tokenSupplier; + + public HttpBearerAuth(String scheme) { + this.scheme = scheme; + } + + /** + * Gets the token, which together with the scheme, will be sent as the value of the Authorization header. + * + * @return The bearer token + */ + public String getBearerToken() { + return tokenSupplier.get(); + } + + /** + * Sets the token, which together with the scheme, will be sent as the value of the Authorization header. + * + * @param bearerToken The bearer token to send in the Authorization header + */ + public void setBearerToken(String bearerToken) { + this.tokenSupplier = () -> bearerToken; + } + + /** + * Sets the supplier of tokens, which together with the scheme, will be sent as the value of the Authorization header. + * + * @param tokenSupplier The supplier of bearer tokens to send in the Authorization header + */ + public void setBearerToken(Supplier tokenSupplier) { + this.tokenSupplier = tokenSupplier; + } + + @Override + public void applyToParams(MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams) { + String bearerToken = Optional.ofNullable(tokenSupplier).map(Supplier::get).orElse(null); + if (bearerToken == null) { + return; + } + headerParams.add(HttpHeaders.AUTHORIZATION, (scheme != null ? upperCaseBearer(scheme) + " " : "") + bearerToken); + } + + private static String upperCaseBearer(String scheme) { + return ("bearer".equalsIgnoreCase(scheme)) ? "Bearer" : scheme; + } +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java new file mode 100644 index 000000000000..4d374ab90bdd --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java @@ -0,0 +1,285 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.io.File; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * Foo + */ +@JsonPropertyOrder({ + Foo.JSON_PROPERTY_DT, + Foo.JSON_PROPERTY_BINARY, + Foo.JSON_PROPERTY_LIST_OF_DT, + Foo.JSON_PROPERTY_LIST_MIN_INTEMS, + Foo.JSON_PROPERTY_REQUIRED_DT, + Foo.JSON_PROPERTY_NUMBER +}) +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class Foo { + public static final String JSON_PROPERTY_DT = "dt"; + + private java.time.@Nullable Instant dt; + + public static final String JSON_PROPERTY_BINARY = "binary"; + + private @Nullable File binary; + + public static final String JSON_PROPERTY_LIST_OF_DT = "listOfDt"; + + private List listOfDt; + + public static final String JSON_PROPERTY_LIST_MIN_INTEMS = "listMinIntems"; + + private List listMinIntems; + + public static final String JSON_PROPERTY_REQUIRED_DT = "requiredDt"; + + private java.time.Instant requiredDt; + + public static final String JSON_PROPERTY_NUMBER = "number"; + + private java.math.@Nullable BigDecimal number; + + public Foo() { + } + + public Foo dt(java.time.@Nullable Instant dt) { + + this.dt = dt; + return this; + } + + /** + * Get dt + * @return dt + */ + + @JsonProperty(value = JSON_PROPERTY_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getDt() { + return java.util.Optional.ofNullable(dt); + } + + + @JsonProperty(value = JSON_PROPERTY_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDt(java.time.@Nullable Instant dt) { + this.dt = dt; + } + + public Foo binary(@Nullable File binary) { + + this.binary = binary; + return this; + } + + /** + * Get binary + * @return binary + */ + + @JsonProperty(value = JSON_PROPERTY_BINARY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional<@Nullable File> getBinary() { + return java.util.Optional.ofNullable(binary); + } + + + @JsonProperty(value = JSON_PROPERTY_BINARY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBinary(@Nullable File binary) { + this.binary = binary; + } + + public Foo listOfDt(List listOfDt) { + + this.listOfDt = listOfDt; + return this; + } + + public Foo addListOfDtItem(java.time.Instant listOfDtItem) { + if (this.listOfDt == null) { + this.listOfDt = new ArrayList<>(); + } + this.listOfDt.add(listOfDtItem); + return this; + } + + /** + * Get listOfDt + * @return listOfDt + */ + + @JsonProperty(value = JSON_PROPERTY_LIST_OF_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional> getListOfDt() { + return java.util.Optional.ofNullable(listOfDt); + } + + + @JsonProperty(value = JSON_PROPERTY_LIST_OF_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setListOfDt(List listOfDt) { + this.listOfDt = listOfDt; + } + + public Foo listMinIntems(List listMinIntems) { + + this.listMinIntems = listMinIntems; + return this; + } + + public Foo addListMinIntemsItem(java.time.Instant listMinIntemsItem) { + if (this.listMinIntems == null) { + this.listMinIntems = new ArrayList<>(); + } + this.listMinIntems.add(listMinIntemsItem); + return this; + } + + /** + * Get listMinIntems + * @return listMinIntems + */ + + @JsonProperty(value = JSON_PROPERTY_LIST_MIN_INTEMS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional> getListMinIntems() { + return java.util.Optional.ofNullable(listMinIntems); + } + + + @JsonProperty(value = JSON_PROPERTY_LIST_MIN_INTEMS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setListMinIntems(List listMinIntems) { + this.listMinIntems = listMinIntems; + } + + public Foo requiredDt(java.time.Instant requiredDt) { + + this.requiredDt = requiredDt; + return this; + } + + /** + * Get requiredDt + * @return requiredDt + */ + + @JsonProperty(value = JSON_PROPERTY_REQUIRED_DT, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public java.time.Instant getRequiredDt() { + return requiredDt; + } + + + @JsonProperty(value = JSON_PROPERTY_REQUIRED_DT, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setRequiredDt(java.time.Instant requiredDt) { + this.requiredDt = requiredDt; + } + + public Foo number(java.math.@Nullable BigDecimal number) { + + this.number = number; + return this; + } + + /** + * Get number + * @return number + */ + + @JsonProperty(value = JSON_PROPERTY_NUMBER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNumber() { + return java.util.Optional.ofNullable(number); + } + + + @JsonProperty(value = JSON_PROPERTY_NUMBER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNumber(java.math.@Nullable BigDecimal number) { + this.number = number; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Foo foo = (Foo) o; + return Objects.equals(this.dt, foo.dt) && + Objects.equals(this.binary, foo.binary) && + Objects.equals(this.listOfDt, foo.listOfDt) && + Objects.equals(this.listMinIntems, foo.listMinIntems) && + Objects.equals(this.requiredDt, foo.requiredDt) && + Objects.equals(this.number, foo.number); + } + + @Override + public int hashCode() { + return Objects.hash(dt, binary, listOfDt, listMinIntems, requiredDt, number); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Foo {\n"); + sb.append(" dt: ").append(toIndentedString(dt)).append("\n"); + sb.append(" binary: ").append(toIndentedString(binary)).append("\n"); + sb.append(" listOfDt: ").append(toIndentedString(listOfDt)).append("\n"); + sb.append(" listMinIntems: ").append(toIndentedString(listMinIntems)).append("\n"); + sb.append(" requiredDt: ").append(toIndentedString(requiredDt)).append("\n"); + sb.append(" number: ").append(toIndentedString(number)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } + +} + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/package-info.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/package-info.java new file mode 100644 index 000000000000..774ca336f509 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package org.openapitools.client.model; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/package-info.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/package-info.java new file mode 100644 index 000000000000..9c547369c362 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package org.openapitools.client; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/DefaultApiTest.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/DefaultApiTest.java new file mode 100644 index 000000000000..9694990b1396 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/DefaultApiTest.java @@ -0,0 +1,93 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import java.io.File; +import org.openapitools.client.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.web.client.RestClientException; + +import java.time.LocalDate; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * API tests for DefaultApi + */ +@Disabled +class DefaultApiTest { + + private final DefaultApi api = new DefaultApi(); + + + /** + * + * + * + * + * @throws RestClientException + * if the Api call fails + */ + @Test + void fileIdGetTest() { + String id = null; + + api.fileIdGet(id); + + // TODO: test validations + } + + /** + * + * + * + * + * @throws RestClientException + * if the Api call fails + */ + @Test + void fooDtParamGetTest() { + java.time.Instant dtParam = null; + java.time.Instant dtQuery = null; + java.time.Instant dtCookie = null; + + Foo response = api.fooDtParamGet(dtParam, dtQuery, dtCookie); + + // TODO: test validations + } + + /** + * + * + * + * + * @throws RestClientException + * if the Api call fails + */ + @Test + void uploadPostTest() { + File _file = null; + + api.uploadPost(_file); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FooTest.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FooTest.java new file mode 100644 index 000000000000..66ed819a0c83 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FooTest.java @@ -0,0 +1,93 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.io.File; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +/** + * Model tests for Foo + */ +class FooTest { + private final Foo model = new Foo(); + + /** + * Model tests for Foo + */ + @Test + void testFoo() { + // TODO: test Foo + } + + /** + * Test the property 'dt' + */ + @Test + void dtTest() { + // TODO: test dt + } + + /** + * Test the property 'binary' + */ + @Test + void binaryTest() { + // TODO: test binary + } + + /** + * Test the property 'listOfDt' + */ + @Test + void listOfDtTest() { + // TODO: test listOfDt + } + + /** + * Test the property 'listMinIntems' + */ + @Test + void listMinIntemsTest() { + // TODO: test listMinIntems + } + + /** + * Test the property 'requiredDt' + */ + @Test + void requiredDtTest() { + // TODO: test requiredDt + } + + /** + * Test the property 'number' + */ + @Test + void numberTest() { + // TODO: test number + } + +} diff --git a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java index 05f141a55f26..63be5f4d8d74 100644 --- a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java index ef033ab05fc7..a38b91d108aa 100644 --- a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java index b55b00c8de99..5056076300cb 100644 --- a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java @@ -126,7 +126,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -159,7 +159,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -192,7 +192,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -225,7 +225,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -258,7 +258,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -291,7 +291,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -336,7 +336,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -381,7 +381,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -459,7 +459,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -504,7 +504,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java index d05630d2c3bf..c2ce75a43f62 100644 --- a/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/vertx-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/EnumTest.java index 05f141a55f26..63be5f4d8d74 100644 --- a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/HealthCheckResult.java index ef033ab05fc7..a38b91d108aa 100644 --- a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/NullableClass.java index b55b00c8de99..5056076300cb 100644 --- a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/NullableClass.java @@ -126,7 +126,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -159,7 +159,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -192,7 +192,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -225,7 +225,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -258,7 +258,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -291,7 +291,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -336,7 +336,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -381,7 +381,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -459,7 +459,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -504,7 +504,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/ParentWithNullable.java index d05630d2c3bf..c2ce75a43f62 100644 --- a/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/vertx/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java index 05f141a55f26..63be5f4d8d74 100644 --- a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java index ef033ab05fc7..a38b91d108aa 100644 --- a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java index b55b00c8de99..5056076300cb 100644 --- a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/NullableClass.java @@ -126,7 +126,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -159,7 +159,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -192,7 +192,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -225,7 +225,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -258,7 +258,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -291,7 +291,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -336,7 +336,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -381,7 +381,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -459,7 +459,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -504,7 +504,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java index d05630d2c3bf..c2ce75a43f62 100644 --- a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/EnumTest.java b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/EnumTest.java index 05f141a55f26..63be5f4d8d74 100644 --- a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/EnumTest.java +++ b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/EnumTest.java @@ -340,7 +340,7 @@ public EnumTest outerEnum(@javax.annotation.Nullable OuterEnum outerEnum) { @JsonIgnore public OuterEnum getOuterEnum() { - return outerEnum.orElse(null); + return outerEnum.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OUTER_ENUM, required = false) diff --git a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/HealthCheckResult.java b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/HealthCheckResult.java index ef033ab05fc7..a38b91d108aa 100644 --- a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/HealthCheckResult.java +++ b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/HealthCheckResult.java @@ -56,7 +56,7 @@ public HealthCheckResult nullableMessage(@javax.annotation.Nullable String nulla @JsonIgnore public String getNullableMessage() { - return nullableMessage.orElse(null); + return nullableMessage.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_MESSAGE, required = false) diff --git a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/NullableClass.java b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/NullableClass.java index b55b00c8de99..5056076300cb 100644 --- a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/NullableClass.java +++ b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/NullableClass.java @@ -126,7 +126,7 @@ public NullableClass integerProp(@javax.annotation.Nullable Integer integerProp) @JsonIgnore public Integer getIntegerProp() { - return integerProp.orElse(null); + return integerProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_INTEGER_PROP, required = false) @@ -159,7 +159,7 @@ public NullableClass numberProp(@javax.annotation.Nullable BigDecimal numberProp @JsonIgnore public BigDecimal getNumberProp() { - return numberProp.orElse(null); + return numberProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NUMBER_PROP, required = false) @@ -192,7 +192,7 @@ public NullableClass booleanProp(@javax.annotation.Nullable Boolean booleanProp) @JsonIgnore public Boolean getBooleanProp() { - return booleanProp.orElse(null); + return booleanProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_BOOLEAN_PROP, required = false) @@ -225,7 +225,7 @@ public NullableClass stringProp(@javax.annotation.Nullable String stringProp) { @JsonIgnore public String getStringProp() { - return stringProp.orElse(null); + return stringProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_STRING_PROP, required = false) @@ -258,7 +258,7 @@ public NullableClass dateProp(@javax.annotation.Nullable LocalDate dateProp) { @JsonIgnore public LocalDate getDateProp() { - return dateProp.orElse(null); + return dateProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATE_PROP, required = false) @@ -291,7 +291,7 @@ public NullableClass datetimeProp(@javax.annotation.Nullable OffsetDateTime date @JsonIgnore public OffsetDateTime getDatetimeProp() { - return datetimeProp.orElse(null); + return datetimeProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_DATETIME_PROP, required = false) @@ -336,7 +336,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { @JsonIgnore public List getArrayNullableProp() { - return arrayNullableProp.orElse(null); + return arrayNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_NULLABLE_PROP, required = false) @@ -381,7 +381,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab @JsonIgnore public List getArrayAndItemsNullableProp() { - return arrayAndItemsNullableProp.orElse(null); + return arrayAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_ARRAY_AND_ITEMS_NULLABLE_PROP, required = false) @@ -459,7 +459,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable @JsonIgnore public Map getObjectNullableProp() { - return objectNullableProp.orElse(null); + return objectNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_NULLABLE_PROP, required = false) @@ -504,7 +504,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object @JsonIgnore public Map getObjectAndItemsNullableProp() { - return objectAndItemsNullableProp.orElse(null); + return objectAndItemsNullableProp.orElse(null); } @JsonProperty(value = JSON_PROPERTY_OBJECT_AND_ITEMS_NULLABLE_PROP, required = false) diff --git a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/ParentWithNullable.java b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/ParentWithNullable.java index d05630d2c3bf..c2ce75a43f62 100644 --- a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/ParentWithNullable.java +++ b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/model/ParentWithNullable.java @@ -131,7 +131,7 @@ public ParentWithNullable nullableProperty(@javax.annotation.Nullable String nul @JsonIgnore public String getNullableProperty() { - return nullableProperty.orElse(null); + return nullableProperty.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_PROPERTY, required = false) diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.github/workflows/maven.yml b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.github/workflows/maven.yml new file mode 100644 index 000000000000..4cdd3d63e3e4 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.github/workflows/maven.yml @@ -0,0 +1,30 @@ +# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven +# +# This file is auto-generated by OpenAPI Generator (https://openapi-generator.tech) + +name: Java CI with Maven + +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] + +jobs: + build: + name: Build jspecify + runs-on: ubuntu-latest + strategy: + matrix: + java: [ 17, 21 ] + steps: + - uses: actions/checkout@v4 + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java }} + distribution: 'temurin' + cache: maven + - name: Build with Maven + run: mvn -B package --no-transfer-progress --file pom.xml diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.gitignore b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.gitignore new file mode 100644 index 000000000000..a530464afa1b --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.gitignore @@ -0,0 +1,21 @@ +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# exclude jar for gradle wrapper +!gradle/wrapper/*.jar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +# build files +**/target +target +.gradle +build diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator-ignore b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.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/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES new file mode 100644 index 000000000000..d59cb3fdbb35 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES @@ -0,0 +1,35 @@ +.github/workflows/maven.yml +.gitignore +.travis.yml +README.md +api/openapi.yaml +build.gradle +build.sbt +docs/DefaultApi.md +docs/Foo.md +git_push.sh +gradle.properties +gradle/wrapper/gradle-wrapper.jar +gradle/wrapper/gradle-wrapper.properties +gradlew +gradlew.bat +pom.xml +settings.gradle +src/main/AndroidManifest.xml +src/main/java/org/openapitools/client/ApiClient.java +src/main/java/org/openapitools/client/JavaTimeFormatter.java +src/main/java/org/openapitools/client/RFC3339DateFormat.java +src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java +src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java +src/main/java/org/openapitools/client/ServerConfiguration.java +src/main/java/org/openapitools/client/ServerVariable.java +src/main/java/org/openapitools/client/StringUtil.java +src/main/java/org/openapitools/client/api/DefaultApi.java +src/main/java/org/openapitools/client/api/package-info.java +src/main/java/org/openapitools/client/auth/ApiKeyAuth.java +src/main/java/org/openapitools/client/auth/Authentication.java +src/main/java/org/openapitools/client/auth/HttpBasicAuth.java +src/main/java/org/openapitools/client/auth/HttpBearerAuth.java +src/main/java/org/openapitools/client/model/Foo.java +src/main/java/org/openapitools/client/model/package-info.java +src/main/java/org/openapitools/client/package-info.java diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION new file mode 100644 index 000000000000..186c33c96ed8 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.24.0-SNAPSHOT diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.travis.yml b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.travis.yml new file mode 100644 index 000000000000..1b6741c083c7 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.travis.yml @@ -0,0 +1,22 @@ +# +# Generated by OpenAPI Generator: https://openapi-generator.tech +# +# Ref: https://docs.travis-ci.com/user/languages/java/ +# +language: java +jdk: + - openjdk12 + - openjdk11 + - openjdk10 + - openjdk9 + - openjdk8 +before_install: + # ensure gradlew has proper permission + - chmod a+x ./gradlew +script: + # test using maven + #- mvn test + # test using gradle + - gradle test + # test using sbt + # - sbt test diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/README.md b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/README.md new file mode 100644 index 000000000000..b18b377a9f1f --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/README.md @@ -0,0 +1,140 @@ +# petstore-webclient-optional-getters + +jspecify + +- API version: 1.0.0 + +- Generator version: 7.24.0-SNAPSHOT + +test fully qualified name and jspecify + + +*Automatically generated by the [OpenAPI Generator](https://openapi-generator.tech)* + +## Requirements + +Building the API client library requires: + +1. Java 1.8+ +2. Maven/Gradle + +## Installation + +To install the API client library to your local Maven repository, simply execute: + +```shell +mvn clean install +``` + +To deploy it to a remote Maven repository instead, configure the settings of the repository and execute: + +```shell +mvn clean deploy +``` + +Refer to the [OSSRH Guide](http://central.sonatype.org/pages/ossrh-guide.html) for more information. + +### Maven users + +Add this dependency to your project's POM: + +```xml + + org.openapitools + petstore-webclient-optional-getters + 1.0.0 + compile + +``` + +### Gradle users + +Add this dependency to your project's build file: + +```groovy + repositories { + mavenCentral() // Needed if the 'petstore-webclient-optional-getters' jar has been published to maven central. + mavenLocal() // Needed if the 'petstore-webclient-optional-getters' jar has been published to the local maven repo. + } + + dependencies { + implementation "org.openapitools:petstore-webclient-optional-getters:1.0.0" + } +``` + +### Others + +At first generate the JAR by executing: + +```shell +mvn clean package +``` + +Then manually install the following JARs: + +- `target/petstore-webclient-optional-getters-1.0.0.jar` +- `target/lib/*.jar` + +## Getting Started + +Please follow the [installation](#installation) instruction and execute the following Java code: + +```java + +import org.openapitools.client.*; +import org.openapitools.client.auth.*; +import org.openapitools.client.model.*; +import org.openapitools.client.api.DefaultApi; + +public class DefaultApiExample { + + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + DefaultApi apiInstance = new DefaultApi(defaultClient); + String id = "id_example"; // String | + try { + apiInstance.fileIdGet(id); + } catch (ApiException e) { + System.err.println("Exception when calling DefaultApi#fileIdGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} + +``` + +## Documentation for API Endpoints + +All URIs are relative to *http://localhost* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*DefaultApi* | [**fileIdGet**](docs/DefaultApi.md#fileIdGet) | **GET** /file/{id} | +*DefaultApi* | [**fooDtParamGet**](docs/DefaultApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | +*DefaultApi* | [**uploadPost**](docs/DefaultApi.md#uploadPost) | **POST** /upload | + + +## Documentation for Models + + - [Foo](docs/Foo.md) + + + +## Documentation for Authorization + +Endpoints do not require authorization. + + +## Recommendation + +It's recommended to create an instance of `ApiClient` per thread in a multithreaded environment to avoid any potential issues. + +## Author + + + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml new file mode 100644 index 000000000000..14c4c1ed2afc --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml @@ -0,0 +1,119 @@ +openapi: 3.0.0 +info: + description: test fully qualified name and jspecify + title: jspecify + version: 1.0.0 +servers: +- url: / +paths: + /foo/{dtParam}: + get: + parameters: + - explode: false + in: path + name: dtParam + required: false + schema: + format: date-time + type: string + style: simple + - explode: true + in: query + name: dtQuery + required: false + schema: + format: date-time + type: string + style: form + - explode: true + in: cookie + name: dtCookie + required: false + schema: + format: date-time + type: string + style: form + responses: + default: + content: + application/json: + schema: + $ref: "#/components/schemas/Foo" + description: response + x-accepts: + - application/json + /upload: + post: + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/_upload_post_request" + description: file + responses: + default: + description: ok + x-content-type: multipart/form-data + x-accepts: + - application/json + /file/{id}: + get: + parameters: + - explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + responses: + "200": + description: ok + x-accepts: + - application/json +components: + schemas: + Foo: + example: + dt: 2000-01-23T04:56:07.000+00:00 + binary: "" + listOfDt: + - 2000-01-23T04:56:07.000+00:00 + - 2000-01-23T04:56:07.000+00:00 + listMinIntems: + - 2000-01-23T04:56:07.000+00:00 + - 2000-01-23T04:56:07.000+00:00 + requiredDt: 2000-01-23T04:56:07.000+00:00 + number: 0.8008281904610115 + properties: + dt: + format: date-time + type: string + binary: + format: binary + type: string + listOfDt: + items: + format: date-time + type: string + type: array + listMinIntems: + items: + format: date-time + type: string + minItems: 1 + type: array + requiredDt: + format: date-time + type: string + number: + type: number + required: + - requiredDt + _upload_post_request: + properties: + file: + format: binary + type: string + type: object + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle new file mode 100644 index 000000000000..2ef1644e882e --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle @@ -0,0 +1,134 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' + +group = 'org.openapitools' +version = '1.0.0' + +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:2.3.+' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' + } +} + +repositories { + mavenCentral() +} + +if(hasProperty('target') && target == 'android') { + + apply plugin: 'com.android.library' + apply plugin: 'com.github.dcendents.android-maven' + + android { + compileSdkVersion 25 + buildToolsVersion '25.0.2' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 25 + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } + + dependencies { + provided "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version" + } + } + + afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDirectory + task.destinationDirectory = project.file("${project.buildDir}/outputs/jar") + task.archiveFileName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task); + } + } + + task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + archiveClassifier = 'sources' + } + + artifacts { + archives sourcesJar + } + +} else { + + apply plugin: 'java' + apply plugin: 'maven-publish' + + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + + publishing { + publications { + maven(MavenPublication) { + artifactId = 'petstore-webclient-optional-getters' + from components.java + } + } + } + + task execute(type:JavaExec) { + mainClass = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath + } + + task sourcesJar(type: Jar, dependsOn: classes) { + archiveClassifier = 'sources' + from sourceSets.main.allSource + } + + task javadocJar(type: Jar, dependsOn: javadoc) { + archiveClassifier = 'javadoc' + from javadoc.destinationDir + } + + artifacts { + archives sourcesJar + archives javadocJar + } +} + +ext { + spring_boot_version = "4.0.3" + jakarta_annotation_version = "3.0.0" + beanvalidation_version = "3.0.2" + reactor_version = "3.5.12" + reactor_netty_version = "1.2.8" + jackson_version = "3.1.0" + jackson_annotations_version = "2.21" + junit_version = "5.10.2" +} + +dependencies { + implementation "io.projectreactor:reactor-core:$reactor_version" + implementation "org.springframework.boot:spring-boot-starter-webflux:$spring_boot_version" + implementation "io.projectreactor.netty:reactor-netty-http:$reactor_netty_version" + implementation "tools.jackson.core:jackson-core:$jackson_version" + implementation "com.fasterxml.jackson.core:jackson-annotations:$jackson_annotations_version" + implementation "tools.jackson.core:jackson-databind:$jackson_version" + implementation "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version" + testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version" +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/build.sbt b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/build.sbt new file mode 100644 index 000000000000..464090415c47 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/build.sbt @@ -0,0 +1 @@ +# TODO diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/DefaultApi.md b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/DefaultApi.md new file mode 100644 index 000000000000..7a0ddb006a06 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/DefaultApi.md @@ -0,0 +1,205 @@ +# DefaultApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**fileIdGet**](DefaultApi.md#fileIdGet) | **GET** /file/{id} | | +| [**fooDtParamGet**](DefaultApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | | +| [**uploadPost**](DefaultApi.md#uploadPost) | **POST** /upload | | + + + +## fileIdGet + +> fileIdGet(id) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.DefaultApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + DefaultApi apiInstance = new DefaultApi(defaultClient); + String id = "id_example"; // String | + try { + apiInstance.fileIdGet(id); + } catch (ApiException e) { + System.err.println("Exception when calling DefaultApi#fileIdGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **id** | **String**| | | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | ok | - | + + +## fooDtParamGet + +> Foo fooDtParamGet(dtParam, dtQuery, dtCookie) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.DefaultApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + DefaultApi apiInstance = new DefaultApi(defaultClient); + java.time.Instant dtParam = new java.time.Instant(); // java.time.Instant | + java.time.Instant dtQuery = new java.time.Instant(); // java.time.Instant | + java.time.Instant dtCookie = new java.time.Instant(); // java.time.Instant | + try { + Foo result = apiInstance.fooDtParamGet(dtParam, dtQuery, dtCookie); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling DefaultApi#fooDtParamGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **dtParam** | **java.time.Instant**| | [optional] | +| **dtQuery** | **java.time.Instant**| | [optional] | +| **dtCookie** | **java.time.Instant**| | [optional] | + +### Return type + +[**Foo**](Foo.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | response | - | + + +## uploadPost + +> uploadPost(_file) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.DefaultApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + DefaultApi apiInstance = new DefaultApi(defaultClient); + File _file = new File("/path/to/file"); // File | + try { + apiInstance.uploadPost(_file); + } catch (ApiException e) { + System.err.println("Exception when calling DefaultApi#uploadPost"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **_file** | **File**| | [optional] | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: multipart/form-data +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | ok | - | + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md new file mode 100644 index 000000000000..d03d21cd097d --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md @@ -0,0 +1,18 @@ + + +# Foo + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**dt** | **java.time.Instant** | | [optional] | +|**binary** | **File** | | [optional] | +|**listOfDt** | **List<java.time.Instant>** | | [optional] | +|**listMinIntems** | **List<java.time.Instant>** | | [optional] | +|**requiredDt** | **java.time.Instant** | | | +|**number** | **java.math.BigDecimal** | | [optional] | + + + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh new file mode 100644 index 000000000000..f53a75d4fabe --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=$(git remote) +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradle.properties b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradle.properties new file mode 100644 index 000000000000..a3408578278a --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradle.properties @@ -0,0 +1,6 @@ +# This file is automatically generated by OpenAPI Generator (https://github.com/openAPITools/openapi-generator). +# To include other gradle properties as part of the code generation process, please use the `gradleProperties` option. +# +# Gradle properties reference: https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties +# For example, uncomment below to build for Android +#target = android diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.jar b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e6441136f3d4ba8a0da8d277868979cfbc8ad796 GIT binary patch literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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
NnX)EH+Nua)3Y(c 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 '} +case $link in #( +/*) app_path=$link ;; #( +*) app_path=$APP_HOME$link ;; +esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { +echo "$*" +} >&2 + +die () { +echo +echo "$*" +echo +exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( +CYGWIN* ) cygwin=true ;; #( +Darwin* ) darwin=true ;; #( +MSYS* | MINGW* ) msys=true ;; #( +NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then +if [ -x "$JAVA_HOME/jre/sh/java" ] ; then +# IBM's JDK on AIX uses strange locations for the executables +JAVACMD=$JAVA_HOME/jre/sh/java +else +JAVACMD=$JAVA_HOME/bin/java +fi +if [ ! -x "$JAVACMD" ] ; then +die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi +else +JAVACMD=java +if ! command -v java >/dev/null 2>&1 +then +die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then +case $MAX_FD in #( +max*) +# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. +# shellcheck disable=SC2039,SC3045 +MAX_FD=$( ulimit -H -n ) || +warn "Could not query maximum file descriptor limit" +esac +case $MAX_FD in #( +'' | soft) :;; #( +*) +# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. +# shellcheck disable=SC2039,SC3045 +ulimit -n "$MAX_FD" || +warn "Could not set maximum file descriptor limit to $MAX_FD" +esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then +APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) +CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + +JAVACMD=$( cygpath --unix "$JAVACMD" ) + +# Now convert the arguments - kludge to limit ourselves to /bin/sh +for arg do +if +case $arg in #( +-*) false ;; # don't mess with options #( +/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath +[ -e "$t" ] ;; #( +*) false ;; +esac +then +arg=$( cygpath --path --ignore --mixed "$arg" ) +fi +# Roll the args list around exactly as many times as the number of +# args, so each arg winds up back in the position where it started, but +# possibly modified. +# +# NB: a `for` loop captures its iteration list before it begins, so +# changing the positional parameters here affects neither the number of +# iterations, nor the values presented in `arg`. +shift # remove old arg +set -- "$@" "$arg" # push replacement arg +done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ +"-Dorg.gradle.appname=$APP_BASE_NAME" \ +-classpath "$CLASSPATH" \ +org.gradle.wrapper.GradleWrapperMain \ +"$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then +die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( +printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | +xargs -n1 | +sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | +tr '\n' ' ' +)" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradlew.bat b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradlew.bat new file mode 100644 index 000000000000..25da30dbdeee --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml new file mode 100644 index 000000000000..30ddebc0edfe --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml @@ -0,0 +1,123 @@ + + 4.0.0 + org.openapitools + petstore-webclient-optional-getters + jar + petstore-webclient-optional-getters + 1.0.0 + https://github.com/openapitools/openapi-generator + OpenAPI Java + + scm:git:git@github.com:openapitools/openapi-generator.git + scm:git:git@github.com:openapitools/openapi-generator.git + https://github.com/openapitools/openapi-generator + + + + + Unlicense + http://unlicense.org + repo + + + + + + OpenAPI-Generator Contributors + team@openapitools.org + OpenAPITools.org + http://openapitools.org + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + 17 + 17 + + + + org.apache.maven.plugins + maven-source-plugin + 3.3.1 + + + attach-sources + + jar-no-fork + + + + + + + + + + io.projectreactor + reactor-core + ${reactor-version} + + + + + org.springframework.boot + spring-boot-starter-webflux + ${spring-boot-version} + + + + io.projectreactor.netty + reactor-netty-http + ${reactor-netty-version} + + + + + tools.jackson.core + jackson-core + ${jackson-version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson-annotations-version} + + + tools.jackson.core + jackson-databind + ${jackson-version} + + + + jakarta.annotation + jakarta.annotation-api + ${jakarta-annotation-version} + provided + + + + + org.junit.jupiter + junit-jupiter-api + ${junit-version} + test + + + + UTF-8 + 3.1.0 + 4.0.3 + 2.1.1 + 3.5.12 + 1.2.8 + 2.21 + 5.14.3 + + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/settings.gradle b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/settings.gradle new file mode 100644 index 000000000000..f2ab6ddadd00 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/settings.gradle @@ -0,0 +1 @@ +rootProject.name = "petstore-webclient-optional-getters" \ No newline at end of file diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/AndroidManifest.xml b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/AndroidManifest.xml new file mode 100644 index 000000000000..54fbcb3da1e8 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java new file mode 100644 index 000000000000..fb2802c40577 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java @@ -0,0 +1,765 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import tools.jackson.databind.DeserializationFeature; + +import tools.jackson.core.JacksonException; +import tools.jackson.databind.json.JsonMapper; +import org.springframework.http.codec.json.JacksonJsonDecoder; +import org.springframework.http.codec.json.JacksonJsonEncoder; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpRequest; +import org.springframework.http.HttpStatus; +import org.springframework.http.InvalidMediaTypeException; +import org.springframework.http.MediaType; +import org.springframework.http.RequestEntity; +import org.springframework.http.RequestEntity.BodyBuilder; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.BufferingClientHttpRequestFactory; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.client.reactive.ClientHttpRequest; +import org.springframework.util.CollectionUtils; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; +import org.springframework.web.client.RestClientException; +import org.springframework.web.util.UriComponentsBuilder; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.reactive.function.client.WebClient.ResponseSpec; +import org.springframework.web.reactive.function.client.ClientResponse; +import org.springframework.web.reactive.function.BodyInserter; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.client.ExchangeStrategies; +import reactor.core.publisher.Mono; +import reactor.core.publisher.Flux; +import java.util.Optional; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.text.DateFormat; +import java.text.ParseException; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TimeZone; + +import jakarta.annotation.Nullable; + +import java.time.OffsetDateTime; + +import org.openapitools.client.auth.Authentication; +import org.openapitools.client.auth.HttpBasicAuth; +import org.openapitools.client.auth.HttpBearerAuth; +import org.openapitools.client.auth.ApiKeyAuth; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class ApiClient extends JavaTimeFormatter { + public enum CollectionFormat { + CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null); + + protected final String separator; + CollectionFormat(String separator) { + this.separator = separator; + } + + protected String collectionToString(Collection collection) { + return StringUtils.collectionToDelimitedString(collection, separator); + } + } + + protected static final String URI_TEMPLATE_ATTRIBUTE = WebClient.class.getName() + ".uriTemplate"; + + protected HttpHeaders defaultHeaders = new HttpHeaders(); + protected MultiValueMap defaultCookies = new LinkedMultiValueMap(); + + protected String basePath = "http://localhost"; + + protected final WebClient webClient; + protected final DateFormat dateFormat; + protected final JsonMapper mapper; + + protected Map authentications; + + + public ApiClient() { + this.dateFormat = createDefaultDateFormat(); + this.mapper = createDefaultMapper(this.dateFormat); + this.webClient = buildWebClient(this.mapper); + this.init(); + } + + public ApiClient(WebClient webClient) { + this(Optional.ofNullable(webClient).orElseGet(() -> buildWebClient()), createDefaultDateFormat()); + } + + public ApiClient(JsonMapper mapper, DateFormat format) { + this(buildWebClient(mapper), format); + } + + public ApiClient(WebClient webClient, JsonMapper mapper, DateFormat format) { + this(Optional.ofNullable(webClient).orElseGet(() -> buildWebClient(mapper)), format); + } + + protected ApiClient(WebClient webClient, DateFormat format) { + this.webClient = webClient; + this.dateFormat = format; + this.mapper = createDefaultMapper(format); + this.init(); + } + + public static DateFormat createDefaultDateFormat() { + DateFormat dateFormat = new RFC3339DateFormat(); + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + return dateFormat; + } + + public static JsonMapper createDefaultMapper(@Nullable DateFormat dateFormat) { + return JsonMapper.builder() + .defaultDateFormat(dateFormat) + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .build(); + } + + + protected void init() { + // Setup authentications (key: authentication name, value: authentication). + authentications = new HashMap(); + // Prevent the authentications from being modified. + authentications = Collections.unmodifiableMap(authentications); + } + + /** + * Build the WebClientBuilder used to make WebClient. + * @param mapper ObjectMapper used for serialize/deserialize + * @return WebClient + */ + public static WebClient.Builder buildWebClientBuilder(JsonMapper mapper) { + ExchangeStrategies strategies = ExchangeStrategies + .builder() + .codecs(clientDefaultCodecsConfigurer -> { + clientDefaultCodecsConfigurer.defaultCodecs().jacksonJsonEncoder(new JacksonJsonEncoder(mapper, MediaType.APPLICATION_JSON)); + clientDefaultCodecsConfigurer.defaultCodecs().jacksonJsonDecoder(new JacksonJsonDecoder(mapper, MediaType.APPLICATION_JSON)); + }).build(); + WebClient.Builder webClientBuilder = WebClient.builder().exchangeStrategies(strategies); + return webClientBuilder; + } + + /** + * Build the WebClientBuilder used to make WebClient. + * @return WebClient + */ + public static WebClient.Builder buildWebClientBuilder() { + return buildWebClientBuilder(createDefaultMapper(null)); + } + + /** + * Build the WebClient used to make HTTP requests. + * @param mapper ObjectMapper used for serialize/deserialize + * @return WebClient + */ + public static WebClient buildWebClient(JsonMapper mapper) { + return buildWebClientBuilder(mapper).build(); + } + + /** + * Build the WebClient used to make HTTP requests. + * @return WebClient + */ + public static WebClient buildWebClient() { + return buildWebClientBuilder(createDefaultMapper(null)).build(); + } + + /** + * Get the current base path + * @return String the base path + */ + public String getBasePath() { + return basePath; + } + + /** + * Set the base path, which should include the host + * @param basePath the base path + * @return ApiClient this client + */ + public ApiClient setBasePath(String basePath) { + this.basePath = basePath; + return this; + } + + /** + * Get authentications (key: authentication name, value: authentication). + * @return Map the currently configured authentication types + */ + public Map getAuthentications() { + return authentications; + } + + /** + * Get authentication for the given name. + * + * @param authName The authentication name + * @return The authentication, null if not found + */ + public Authentication getAuthentication(String authName) { + return authentications.get(authName); + } + + /** + * Helper method to set access token for the first Bearer authentication. + * @param bearerToken Bearer token + */ + public void setBearerToken(String bearerToken) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBearerAuth) { + ((HttpBearerAuth) auth).setBearerToken(bearerToken); + return; + } + } + throw new RuntimeException("No Bearer authentication configured!"); + } + + /** + * Helper method to set username for the first HTTP basic authentication. + * @param username the username + */ + public void setUsername(String username) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setUsername(username); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set password for the first HTTP basic authentication. + * @param password the password + */ + public void setPassword(String password) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setPassword(password); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set API key value for the first API key authentication. + * @param apiKey the API key + */ + public void setApiKey(String apiKey) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKey(apiKey); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** + * Helper method to set API key prefix for the first API key authentication. + * @param apiKeyPrefix the API key prefix + */ + public void setApiKeyPrefix(String apiKeyPrefix) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** + * Set the User-Agent header's value (by adding to the default header map). + * @param userAgent the user agent string + * @return ApiClient this client + */ + public ApiClient setUserAgent(String userAgent) { + addDefaultHeader("User-Agent", userAgent); + return this; + } + + /** + * Add a default header. + * + * @param name The header's name + * @param value The header's value + * @return ApiClient this client + */ + public ApiClient addDefaultHeader(String name, String value) { + defaultHeaders.set(name, value); + return this; + } + + /** + * Add a default cookie. + * + * @param name The cookie's name + * @param value The cookie's value + * @return ApiClient this client + */ + public ApiClient addDefaultCookie(String name, String value) { + if (defaultCookies.containsKey(name)) { + defaultCookies.remove(name); + } + defaultCookies.add(name, value); + return this; + } + + /** + * Get the date format used to parse/format date parameters. + * @return DateFormat format + */ + public DateFormat getDateFormat() { + return dateFormat; + } + + /** + * Parse the given string into Date object. + */ + public Date parseDate(String str) { + try { + return dateFormat.parse(str); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + + /** + * Format the given Date object into string. + */ + public String formatDate(Date date) { + return dateFormat.format(date); + } + + /** + * Get the JsonMapper used to make HTTP requests. + * @return JsonMapper mapper + */ + public JsonMapper getJsonMapper() { + return mapper; + } + + /** + * Get the WebClient used to make HTTP requests. + * @return WebClient webClient + */ + public WebClient getWebClient() { + return webClient; + } + + /** + * Format the given parameter object into string. + * @param param the object to convert + * @return String the parameter represented as a String + */ + public String parameterToString(Object param) { + if (param == null) { + return ""; + } else if (param instanceof Date) { + return formatDate( (Date) param); + } else if (param instanceof OffsetDateTime) { + return formatOffsetDateTime((OffsetDateTime) param); + } else if (param instanceof Collection) { + StringBuilder b = new StringBuilder(); + for(Object o : (Collection) param) { + if(b.length() > 0) { + b.append(","); + } + b.append(String.valueOf(o)); + } + return b.toString(); + } else { + return String.valueOf(param); + } + } + + /** + * Converts a parameter to a {@link MultiValueMap} containing Json-serialized values for use in REST requests + * @param collectionFormat The format to convert to + * @param name The name of the parameter + * @param value The parameter's value + * @return a Map containing the Json-serialized String value(s) of the input parameter + */ + public MultiValueMap parameterToMultiValueMapJson(CollectionFormat collectionFormat, String name, Object value) { + Collection valueCollection; + if (value instanceof Collection) { + valueCollection = (Collection) value; + } else { + try { + return parameterToMultiValueMap(collectionFormat, name, mapper.writeValueAsString(value)); + } catch (JacksonException e) { + throw new RuntimeException(e); + } + } + + List values = new ArrayList<>(); + for(Object o : valueCollection) { + try { + values.add(mapper.writeValueAsString(o)); + } catch (JacksonException e) { + throw new RuntimeException(e); + } + } + return parameterToMultiValueMap(collectionFormat, name, "[" + StringUtils.collectionToDelimitedString(values, collectionFormat.separator) + "]"); + } + + /** + * Converts a parameter to a {@link MultiValueMap} for use in REST requests + * @param collectionFormat The format to convert to + * @param name The name of the parameter + * @param value The parameter's value + * @return a Map containing the String value(s) of the input parameter + */ + public MultiValueMap parameterToMultiValueMap(CollectionFormat collectionFormat, String name, Object value) { + final MultiValueMap params = new LinkedMultiValueMap(); + + if (name == null || name.isEmpty() || value == null) { + return params; + } + + if(collectionFormat == null) { + collectionFormat = CollectionFormat.CSV; + } + + if (value instanceof Map) { + @SuppressWarnings("unchecked") + final Map valuesMap = (Map) value; + for (final Entry entry : valuesMap.entrySet()) { + params.add(entry.getKey(), parameterToString(entry.getValue())); + } + return params; + } + + Collection valueCollection = null; + if (value instanceof Collection) { + valueCollection = (Collection) value; + } else { + params.add(name, parameterToString(value)); + return params; + } + + if (valueCollection.isEmpty()){ + return params; + } + + if (collectionFormat.equals(CollectionFormat.MULTI)) { + for (Object item : valueCollection) { + params.add(name, parameterToString(item)); + } + return params; + } + + List values = new ArrayList(); + for(Object o : valueCollection) { + values.add(parameterToString(o)); + } + params.add(name, collectionFormat.collectionToString(values)); + + return params; + } + + /** + * Check if the given {@code String} is a JSON MIME. + * @param mediaType the input MediaType + * @return boolean true if the MediaType represents JSON, false otherwise + */ + public boolean isJsonMime(String mediaType) { + // "* / *" is default to JSON + if ("*/*".equals(mediaType)) { + return true; + } + + try { + return isJsonMime(MediaType.parseMediaType(mediaType)); + } catch (InvalidMediaTypeException e) { + } + return false; + } + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + * @param mediaType the input MediaType + * @return boolean true if the MediaType represents JSON, false otherwise + */ + public boolean isJsonMime(MediaType mediaType) { + return mediaType != null && (MediaType.APPLICATION_JSON.isCompatibleWith(mediaType) || mediaType.getSubtype().matches("^.*(\\+json|ndjson)[;]?\\s*$")); + } + + /** + * Check if the given {@code String} is a Problem JSON MIME (RFC-7807). + * @param mediaType the input MediaType + * @return boolean true if the MediaType represents Problem JSON, false otherwise + */ + public boolean isProblemJsonMime(String mediaType) { + return "application/problem+json".equalsIgnoreCase(mediaType); + } + + /** + * Select the Accept header's value from the given accepts array: + * if JSON exists in the given array, use it; + * otherwise use all of them (joining into a string) + * + * @param accepts The accepts array to select from + * @return List The list of MediaTypes to use for the Accept header + */ + public List selectHeaderAccept(String[] accepts) { + if (accepts.length == 0) { + return null; + } + for (String accept : accepts) { + MediaType mediaType = MediaType.parseMediaType(accept); + if (isJsonMime(mediaType) && !isProblemJsonMime(accept)) { + return Collections.singletonList(mediaType); + } + } + return MediaType.parseMediaTypes(StringUtils.arrayToCommaDelimitedString(accepts)); + } + + /** + * Select the Content-Type header's value from the given array: + * if JSON exists in the given array, use it; + * otherwise use the first one of the array. + * + * @param contentTypes The Content-Type array to select from + * @return MediaType The Content-Type header to use. If the given array is empty, null will be returned. + */ + public MediaType selectHeaderContentType(String[] contentTypes) { + if (contentTypes.length == 0) { + return null; + } + for (String contentType : contentTypes) { + MediaType mediaType = MediaType.parseMediaType(contentType); + if (isJsonMime(mediaType)) { + return mediaType; + } + } + return MediaType.parseMediaType(contentTypes[0]); + } + + /** + * Select the body to use for the request + * @param obj the body object + * @param formParams the form parameters + * @param contentType the content type of the request + * @return Object the selected body + */ + protected BodyInserter selectBody(Object obj, MultiValueMap formParams, MediaType contentType) { + if(MediaType.APPLICATION_FORM_URLENCODED.equals(contentType)) { + MultiValueMap map = new LinkedMultiValueMap<>(); + + formParams + .toSingleValueMap() + .entrySet() + .forEach(es -> map.add(es.getKey(), String.valueOf(es.getValue()))); + + return BodyInserters.fromFormData(map); + } else if(MediaType.MULTIPART_FORM_DATA.equals(contentType)) { + return BodyInserters.fromMultipartData(formParams); + } else { + return obj != null ? BodyInserters.fromValue(obj) : null; + } + } + + /** + * Invoke API by sending HTTP request with the given options. + * + * @param the return type to use + * @param path The sub-path of the HTTP URL + * @param method The request method + * @param pathParams The path parameters + * @param queryParams The query parameters + * @param body The request body object + * @param headerParams The header parameters + * @param formParams The form parameters + * @param accept The request's Accept header + * @param contentType The request's Content-Type header + * @param authNames The authentications to apply + * @param returnType The return type into which to deserialize the response + * @return The response body in chosen type + */ + public ResponseSpec invokeAPI(String path, HttpMethod method, Map pathParams, MultiValueMap queryParams, Object body, HttpHeaders headerParams, MultiValueMap cookieParams, MultiValueMap formParams, List accept, MediaType contentType, String[] authNames, ParameterizedTypeReference returnType) throws RestClientException { + final WebClient.RequestBodySpec requestBuilder = prepareRequest(path, method, pathParams, queryParams, body, headerParams, cookieParams, formParams, accept, contentType, authNames); + return requestBuilder.retrieve(); + } + + /** + * Include queryParams in uriParams taking into account the paramName + * @param queryParams The query parameters + * @param uriParams The path parameters + * return templatized query string + */ + protected String generateQueryUri(MultiValueMap queryParams, Map uriParams) { + StringBuilder queryBuilder = new StringBuilder(); + queryParams.forEach((name, values) -> { + if (CollectionUtils.isEmpty(values)) { + if (queryBuilder.length() != 0) { + queryBuilder.append('&'); + } + queryBuilder.append(name); + } else { + int valueItemCounter = 0; + for (Object value : values) { + if (queryBuilder.length() != 0) { + queryBuilder.append('&'); + } + queryBuilder.append(name); + if (value != null) { + String templatizedKey = name + valueItemCounter++; + uriParams.put(templatizedKey, value.toString()); + queryBuilder.append('=').append("{").append(templatizedKey).append("}"); + } + } + } + }); + return queryBuilder.toString(); + } + + protected WebClient.RequestBodySpec prepareRequest(String path, HttpMethod method, Map pathParams, + MultiValueMap queryParams, Object body, HttpHeaders headerParams, + MultiValueMap cookieParams, MultiValueMap formParams, List accept, + MediaType contentType, String[] authNames) { + updateParamsForAuth(authNames, queryParams, headerParams, cookieParams); + + final UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(basePath).path(path); + + String finalUri = builder.build(false).toUriString(); + Map uriParams = new HashMap<>(); + uriParams.putAll(pathParams); + + if (queryParams != null && !queryParams.isEmpty()) { + //Include queryParams in uriParams taking into account the paramName + String queryUri = generateQueryUri(queryParams, uriParams); + //Append to finalUri the templatized query string like "?param1={param1Value}&....... + finalUri += "?" + queryUri; + } + + final WebClient.RequestBodySpec requestBuilder = webClient.method(method).uri(finalUri, uriParams); + + if (accept != null) { + requestBuilder.accept(accept.toArray(new MediaType[accept.size()])); + } + if(contentType != null) { + requestBuilder.contentType(contentType); + } + + addHeadersToRequest(headerParams, requestBuilder); + addHeadersToRequest(defaultHeaders, requestBuilder); + addCookiesToRequest(cookieParams, requestBuilder); + addCookiesToRequest(defaultCookies, requestBuilder); + + requestBuilder.attribute(URI_TEMPLATE_ATTRIBUTE, path); + + requestBuilder.body(selectBody(body, formParams, contentType)); + return requestBuilder; + } + + /** + * Add headers to the request that is being built + * @param headers The headers to add + * @param requestBuilder The current request + */ + protected void addHeadersToRequest(HttpHeaders headers, WebClient.RequestBodySpec requestBuilder) { + for (Entry> entry : headers.headerSet()) { + List values = entry.getValue(); + for(String value : values) { + if (value != null) { + requestBuilder.header(entry.getKey(), value); + } + } + } + } + + /** + * Add cookies to the request that is being built + * @param cookies The cookies to add + * @param requestBuilder The current request + */ + protected void addCookiesToRequest(MultiValueMap cookies, WebClient.RequestBodySpec requestBuilder) { + for (Entry> entry : cookies.entrySet()) { + List values = entry.getValue(); + for(String value : values) { + if (value != null) { + requestBuilder.cookie(entry.getKey(), value); + } + } + } + } + + /** + * Update query and header parameters based on authentication settings. + * + * @param authNames The authentications to apply + * @param queryParams The query parameters + * @param headerParams The header parameters + * @param cookieParams the cookie parameters + */ + protected void updateParamsForAuth(String[] authNames, MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams) { + for (String authName : authNames) { + Authentication auth = authentications.get(authName); + if (auth == null) { + throw new RestClientException("Authentication undefined: " + authName); + } + auth.applyToParams(queryParams, headerParams, cookieParams); + } + } + + /** + * Formats the specified collection path parameter to a string value. + * + * @param collectionFormat The collection format of the parameter. + * @param values The values of the parameter. + * @return String representation of the parameter + */ + public String collectionPathParameterToString(CollectionFormat collectionFormat, Collection values) { + // create the value based on the collection format + if (CollectionFormat.MULTI.equals(collectionFormat)) { + // not valid for path params + return parameterToString(values); + } + + // collectionFormat is assumed to be "csv" by default + if(collectionFormat == null) { + collectionFormat = CollectionFormat.CSV; + } + + return collectionFormat.collectionToString(values); + } +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java new file mode 100644 index 000000000000..d25e3fc7c76d --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java @@ -0,0 +1,68 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package org.openapitools.client; + +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; + +/** + * Class that add parsing/formatting support for Java 8+ {@code OffsetDateTime} class. + * It's generated for java clients when {@code AbstractJavaCodegen#dateLibrary} specified as {@code java8}. + */ +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class JavaTimeFormatter { + private DateTimeFormatter offsetDateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; + + /** + * Get the date format used to parse/format {@code OffsetDateTime} parameters. + * + * @return DateTimeFormatter + */ + public DateTimeFormatter getOffsetDateTimeFormatter() { + return offsetDateTimeFormatter; + } + + /** + * Set the date format used to parse/format {@code OffsetDateTime} parameters. + * + * @param offsetDateTimeFormatter {@code DateTimeFormatter} + */ + public void setOffsetDateTimeFormatter(DateTimeFormatter offsetDateTimeFormatter) { + this.offsetDateTimeFormatter = offsetDateTimeFormatter; + } + + /** + * Parse the given string into {@code OffsetDateTime} object. + * + * @param str String + * @return {@code OffsetDateTime} + */ + public OffsetDateTime parseOffsetDateTime(String str) { + try { + return OffsetDateTime.parse(str, offsetDateTimeFormatter); + } catch (DateTimeParseException e) { + throw new RuntimeException(e); + } + } + + /** + * Format the given {@code OffsetDateTime} object into string. + * + * @param offsetDateTime {@code OffsetDateTime} + * @return {@code OffsetDateTime} in string format + */ + public String formatOffsetDateTime(OffsetDateTime offsetDateTime) { + return offsetDateTimeFormatter.format(offsetDateTime); + } +} \ No newline at end of file diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java new file mode 100644 index 000000000000..9c82900edf4e --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java @@ -0,0 +1,57 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package org.openapitools.client; + +import java.text.DateFormat; +import java.text.FieldPosition; +import java.text.ParsePosition; +import java.util.Date; +import java.text.DecimalFormat; +import java.util.GregorianCalendar; +import java.util.TimeZone; +import tools.jackson.databind.util.StdDateFormat; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class RFC3339DateFormat extends DateFormat { + private static final long serialVersionUID = 1L; + private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC"); + + private final StdDateFormat fmt = new StdDateFormat() + .withTimeZone(TIMEZONE_Z) + .withColonInTimeZone(true); + + public RFC3339DateFormat() { + this.calendar = new GregorianCalendar(); + this.numberFormat = new DecimalFormat(); + } + + @Override + public Date parse(String source) { + return parse(source, new ParsePosition(0)); + } + + @Override + public Date parse(String source, ParsePosition pos) { + return fmt.parse(source, pos); + } + + @Override + public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { + return fmt.format(date, toAppendTo, fieldPosition); + } + + @Override + public Object clone() { + return super.clone(); + } +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java new file mode 100644 index 000000000000..9756de75911c --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java @@ -0,0 +1,100 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package org.openapitools.client; + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.Temporal; +import java.time.temporal.TemporalAccessor; +import java.util.function.BiFunction; +import java.util.function.Function; + +import tools.jackson.core.JacksonException; +import tools.jackson.core.JsonParser; +import tools.jackson.databind.DeserializationContext; +import tools.jackson.databind.cfg.DateTimeFeature; +import tools.jackson.databind.ext.javatime.deser.InstantDeserializer; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class RFC3339InstantDeserializer extends InstantDeserializer { + private static final long serialVersionUID = 1L; + private final static boolean DEFAULT_NORMALIZE_ZONE_ID = DateTimeFeature.NORMALIZE_DESERIALIZED_ZONE_ID.enabledByDefault(); + private final static boolean DEFAULT_ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS + = DateTimeFeature.ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS.enabledByDefault(); + + public static final RFC3339InstantDeserializer INSTANT = new RFC3339InstantDeserializer<>( + Instant.class, DateTimeFormatter.ISO_INSTANT, + Instant::from, + a -> Instant.ofEpochMilli( a.value ), + a -> Instant.ofEpochSecond( a.integer, a.fraction ), + null, + true, // yes, replace zero offset with Z + DEFAULT_NORMALIZE_ZONE_ID, + DEFAULT_ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS + ); + + public static final RFC3339InstantDeserializer OFFSET_DATE_TIME = new RFC3339InstantDeserializer<>( + OffsetDateTime.class, DateTimeFormatter.ISO_OFFSET_DATE_TIME, + OffsetDateTime::from, + a -> OffsetDateTime.ofInstant( Instant.ofEpochMilli( a.value ), a.zoneId ), + a -> OffsetDateTime.ofInstant( Instant.ofEpochSecond( a.integer, a.fraction ), a.zoneId ), + (d, z) -> ( d.isEqual( OffsetDateTime.MIN ) || d.isEqual( OffsetDateTime.MAX ) ? + d : + d.withOffsetSameInstant( z.getRules().getOffset( d.toLocalDateTime() ) ) ), + true, // yes, replace zero offset with Z + DEFAULT_NORMALIZE_ZONE_ID, + DEFAULT_ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS + ); + + public static final RFC3339InstantDeserializer ZONED_DATE_TIME = new RFC3339InstantDeserializer<>( + ZonedDateTime.class, DateTimeFormatter.ISO_ZONED_DATE_TIME, + ZonedDateTime::from, + a -> ZonedDateTime.ofInstant( Instant.ofEpochMilli( a.value ), a.zoneId ), + a -> ZonedDateTime.ofInstant( Instant.ofEpochSecond( a.integer, a.fraction ), a.zoneId ), + ZonedDateTime::withZoneSameInstant, + false, // keep zero offset and Z separate since zones explicitly supported + DEFAULT_NORMALIZE_ZONE_ID, + DEFAULT_ALWAYS_ALLOW_STRINGIFIED_DATE_TIMESTAMPS + ); + + protected RFC3339InstantDeserializer( + Class supportedType, + DateTimeFormatter formatter, + Function parsedToValue, + Function fromMilliseconds, + Function fromNanoseconds, + BiFunction adjust, + boolean replaceZeroOffsetAsZ, + boolean normalizeZoneId, + boolean readNumericStringsAsTimestamp) { + super( + supportedType, + formatter, + parsedToValue, + fromMilliseconds, + fromNanoseconds, + adjust, + replaceZeroOffsetAsZ, + normalizeZoneId, + readNumericStringsAsTimestamp + ); + } + + @Override + protected T _fromString(JsonParser p, DeserializationContext ctxt, String string0) throws JacksonException { + return super._fromString(p, ctxt, string0.replace( ' ', 'T' )); + } +} \ No newline at end of file diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java new file mode 100644 index 000000000000..0a0c7f7c929c --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java @@ -0,0 +1,33 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package org.openapitools.client; + +import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZonedDateTime; + +import tools.jackson.databind.module.SimpleModule; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class RFC3339JavaTimeModule extends SimpleModule { + private static final long serialVersionUID = 1L; + + public RFC3339JavaTimeModule() { + super("RFC3339JavaTimeModule"); + addDeserializer(Instant.class, RFC3339InstantDeserializer.INSTANT); + addDeserializer(OffsetDateTime.class, RFC3339InstantDeserializer.OFFSET_DATE_TIME); + addDeserializer(ZonedDateTime.class, RFC3339InstantDeserializer.ZONED_DATE_TIME); + } + + +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java new file mode 100644 index 000000000000..017652e55155 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java @@ -0,0 +1,72 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import java.util.Map; + +/** + * Representing a Server configuration. + */ +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class ServerConfiguration { + public String URL; + public String description; + public Map variables; + + /** + * @param URL A URL to the target host. + * @param description A description of the host designated by the URL. + * @param variables A map between a variable name and its value. The value is used for substitution in the server's URL template. + */ + public ServerConfiguration(String URL, String description, Map variables) { + this.URL = URL; + this.description = description; + this.variables = variables; + } + + /** + * Format URL template using given variables. + * + * @param variables A map between a variable name and its value. + * @return Formatted URL. + */ + public String URL(Map variables) { + String url = this.URL; + + // go through variables and replace placeholders + for (Map.Entry variable: this.variables.entrySet()) { + String name = variable.getKey(); + ServerVariable serverVariable = variable.getValue(); + String value = serverVariable.defaultValue; + + if (variables != null && variables.containsKey(name)) { + value = variables.get(name); + if (serverVariable.enumValues.size() > 0 && !serverVariable.enumValues.contains(value)) { + throw new IllegalArgumentException("The variable " + name + " in the server URL has invalid value " + value + "."); + } + } + url = url.replace("{" + name + "}", value); + } + return url; + } + + /** + * Format URL template using default server variables. + * + * @return Formatted URL. + */ + public String URL() { + return URL(null); + } +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java new file mode 100644 index 000000000000..0740bf8aa46f --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java @@ -0,0 +1,37 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import java.util.HashSet; + +/** + * Representing a Server Variable for server URL template substitution. + */ +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class ServerVariable { + public String description; + public String defaultValue; + public HashSet enumValues = null; + + /** + * @param description A description for the server variable. + * @param defaultValue The default value to use for substitution. + * @param enumValues An enumeration of string values to be used if the substitution options are from a limited set. + */ + public ServerVariable(String description, String defaultValue, HashSet enumValues) { + this.description = description; + this.defaultValue = defaultValue; + this.enumValues = enumValues; + } +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java new file mode 100644 index 000000000000..0e31119b87fc --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java @@ -0,0 +1,83 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import java.util.Collection; +import java.util.Iterator; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class StringUtil { + /** + * Check if the given array contains the given value (with case-insensitive comparison). + * + * @param array The array + * @param value The value to search + * @return true if the array contains the value + */ + public static boolean containsIgnoreCase(String[] array, String value) { + for (String str : array) { + if (value == null && str == null) { + return true; + } + if (value != null && value.equalsIgnoreCase(str)) { + return true; + } + } + return false; + } + + /** + * Join an array of strings with the given separator. + *

+ * Note: This might be replaced by utility method from commons-lang or guava someday + * if one of those libraries is added as dependency. + *

+ * + * @param array The array of strings + * @param separator The separator + * @return the resulting string + */ + public static String join(String[] array, String separator) { + int len = array.length; + if (len == 0) { + return ""; + } + + StringBuilder out = new StringBuilder(); + out.append(array[0]); + for (int i = 1; i < len; i++) { + out.append(separator).append(array[i]); + } + return out.toString(); + } + + /** + * Join a list of strings with the given separator. + * + * @param list The list of strings + * @param separator The separator + * @return the resulting string + */ + public static String join(Collection list, String separator) { + Iterator iterator = list.iterator(); + StringBuilder out = new StringBuilder(); + if (iterator.hasNext()) { + out.append(iterator.next()); + } + while (iterator.hasNext()) { + out.append(separator).append(iterator.next()); + } + return out.toString(); + } +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java new file mode 100644 index 000000000000..440f85f9d8f5 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java @@ -0,0 +1,273 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; + +import java.io.File; +import org.openapitools.client.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Arrays; +import java.util.stream.Collectors; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.reactive.function.client.WebClient.ResponseSpec; +import org.springframework.web.reactive.function.client.WebClientResponseException; +import reactor.core.publisher.Mono; +import reactor.core.publisher.Flux; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class DefaultApi { + private ApiClient apiClient; + + public DefaultApi() { + this(new ApiClient()); + } + + public DefaultApi(ApiClient apiClient) { + this.apiClient = apiClient; + } + + public ApiClient getApiClient() { + return apiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.apiClient = apiClient; + } + + /** + * + * + *

200 - ok + * @param id The id parameter + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec fileIdGetRequestCreation(String id) throws WebClientResponseException { + Object postBody = null; + // verify the required parameter 'id' is set + if (id == null) { + throw new WebClientResponseException("Missing the required parameter 'id' when calling fileIdGet", HttpStatus.BAD_REQUEST.value(), HttpStatus.BAD_REQUEST.getReasonPhrase(), null, null, null); + } + // create path and map variables + final Map pathParams = new HashMap(); + + pathParams.put("id", id); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap(); + final MultiValueMap formParams = new LinkedMultiValueMap(); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/file/{id}", HttpMethod.GET, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

200 - ok + * @param id The id parameter + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono fileIdGet(String id) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return fileIdGetRequestCreation(id).bodyToMono(localVarReturnType); + } + + /** + * + * + *

200 - ok + * @param id The id parameter + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono> fileIdGetWithHttpInfo(String id) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return fileIdGetRequestCreation(id).toEntity(localVarReturnType); + } + + /** + * + * + *

200 - ok + * @param id The id parameter + * @return ResponseSpec + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec fileIdGetWithResponseSpec(String id) throws WebClientResponseException { + return fileIdGetRequestCreation(id); + } + + /** + * + * + *

0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @return Foo + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec fooDtParamGetRequestCreation(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie) throws WebClientResponseException { + Object postBody = null; + // create path and map variables + final Map pathParams = new HashMap(); + + pathParams.put("dtParam", dtParam); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap(); + final MultiValueMap formParams = new LinkedMultiValueMap(); + + localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "dtQuery", dtQuery)); + + cookieParams.putAll(apiClient.parameterToMultiValueMap(null, "dtCookie", dtCookie)); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/foo/{dtParam}", HttpMethod.GET, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @return Foo + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono fooDtParamGet(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return fooDtParamGetRequestCreation(dtParam, dtQuery, dtCookie).bodyToMono(localVarReturnType); + } + + /** + * + * + *

0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @return ResponseEntity<Foo> + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono> fooDtParamGetWithHttpInfo(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return fooDtParamGetRequestCreation(dtParam, dtQuery, dtCookie).toEntity(localVarReturnType); + } + + /** + * + * + *

0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @return ResponseSpec + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec fooDtParamGetWithResponseSpec(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie) throws WebClientResponseException { + return fooDtParamGetRequestCreation(dtParam, dtQuery, dtCookie); + } + + /** + * + * + *

0 - ok + * @param _file The _file parameter + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec uploadPostRequestCreation(@Nullable File _file) throws WebClientResponseException { + Object postBody = null; + // create path and map variables + final Map pathParams = new HashMap(); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap(); + final MultiValueMap formParams = new LinkedMultiValueMap(); + + if (_file != null) + formParams.add("file", new FileSystemResource(_file)); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "multipart/form-data" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/upload", HttpMethod.POST, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

0 - ok + * @param _file The _file parameter + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono uploadPost(@Nullable File _file) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return uploadPostRequestCreation(_file).bodyToMono(localVarReturnType); + } + + /** + * + * + *

0 - ok + * @param _file The _file parameter + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono> uploadPostWithHttpInfo(@Nullable File _file) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return uploadPostRequestCreation(_file).toEntity(localVarReturnType); + } + + /** + * + * + *

0 - ok + * @param _file The _file parameter + * @return ResponseSpec + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec uploadPostWithResponseSpec(@Nullable File _file) throws WebClientResponseException { + return uploadPostRequestCreation(_file); + } +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/package-info.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/package-info.java new file mode 100644 index 000000000000..6d0d02339408 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package org.openapitools.client.api; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java new file mode 100644 index 000000000000..e8889c30d615 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java @@ -0,0 +1,75 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.auth; + +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class ApiKeyAuth implements Authentication { + private final String location; + private final String paramName; + + private String apiKey; + private String apiKeyPrefix; + + public ApiKeyAuth(String location, String paramName) { + this.location = location; + this.paramName = paramName; + } + + public String getLocation() { + return location; + } + + public String getParamName() { + return paramName; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getApiKeyPrefix() { + return apiKeyPrefix; + } + + public void setApiKeyPrefix(String apiKeyPrefix) { + this.apiKeyPrefix = apiKeyPrefix; + } + + @Override + public void applyToParams(MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams) { + if (apiKey == null) { + return; + } + String value; + if (apiKeyPrefix != null) { + value = apiKeyPrefix + " " + apiKey; + } else { + value = apiKey; + } + if (location.equals("query")) { + queryParams.add(paramName, value); + } else if (location.equals("header")) { + headerParams.add(paramName, value); + } else if (location.equals("cookie")) { + cookieParams.add(paramName, value); + } + } +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java new file mode 100644 index 000000000000..5625ecc76ed8 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java @@ -0,0 +1,29 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.auth; + +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public interface Authentication { + /** + * Apply authentication settings to header and / or query parameters. + * + * @param queryParams The query parameters for the request + * @param headerParams The header parameters for the request + * @param cookieParams The cookie parameters for the request + */ + void applyToParams(MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams); +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java new file mode 100644 index 000000000000..12c04ffa1e0d --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java @@ -0,0 +1,51 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.auth; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class HttpBasicAuth implements Authentication { + private String username; + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public void applyToParams(MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams) { + if (username == null && password == null) { + return; + } + String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); + headerParams.add(HttpHeaders.AUTHORIZATION, "Basic " + Base64.getEncoder().encodeToString(str.getBytes(StandardCharsets.UTF_8))); + } +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java new file mode 100644 index 000000000000..00825bc34a79 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java @@ -0,0 +1,48 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.auth; + +import org.springframework.http.HttpHeaders; +import org.springframework.util.MultiValueMap; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class HttpBearerAuth implements Authentication { + private final String scheme; + private String bearerToken; + + public HttpBearerAuth(String scheme) { + this.scheme = scheme; + } + + public String getBearerToken() { + return bearerToken; + } + + public void setBearerToken(String bearerToken) { + this.bearerToken = bearerToken; + } + + @Override + public void applyToParams(MultiValueMap queryParams, HttpHeaders headerParams, MultiValueMap cookieParams) { + if (bearerToken == null) { + return; + } + headerParams.add(HttpHeaders.AUTHORIZATION, (scheme != null ? upperCaseBearer(scheme) + " " : "") + bearerToken); + } + + private static String upperCaseBearer(String scheme) { + return ("bearer".equalsIgnoreCase(scheme)) ? "Bearer" : scheme; + } + +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java new file mode 100644 index 000000000000..68ca96733f98 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java @@ -0,0 +1,284 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.io.File; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * Foo + */ +@JsonPropertyOrder({ + Foo.JSON_PROPERTY_DT, + Foo.JSON_PROPERTY_BINARY, + Foo.JSON_PROPERTY_LIST_OF_DT, + Foo.JSON_PROPERTY_LIST_MIN_INTEMS, + Foo.JSON_PROPERTY_REQUIRED_DT, + Foo.JSON_PROPERTY_NUMBER +}) +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class Foo { + public static final String JSON_PROPERTY_DT = "dt"; + + private java.time.@Nullable Instant dt; + + public static final String JSON_PROPERTY_BINARY = "binary"; + + private @Nullable File binary; + + public static final String JSON_PROPERTY_LIST_OF_DT = "listOfDt"; + + private List listOfDt; + + public static final String JSON_PROPERTY_LIST_MIN_INTEMS = "listMinIntems"; + + private List listMinIntems; + + public static final String JSON_PROPERTY_REQUIRED_DT = "requiredDt"; + + private java.time.Instant requiredDt; + + public static final String JSON_PROPERTY_NUMBER = "number"; + + private java.math.@Nullable BigDecimal number; + + public Foo() { + } + + public Foo dt(java.time.@Nullable Instant dt) { + + this.dt = dt; + return this; + } + + /** + * Get dt + * @return dt + */ + + @JsonProperty(value = JSON_PROPERTY_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getDt() { + return java.util.Optional.ofNullable(dt); + } + + + @JsonProperty(value = JSON_PROPERTY_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setDt(java.time.@Nullable Instant dt) { + this.dt = dt; + } + + public Foo binary(@Nullable File binary) { + + this.binary = binary; + return this; + } + + /** + * Get binary + * @return binary + */ + + @JsonProperty(value = JSON_PROPERTY_BINARY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional<@Nullable File> getBinary() { + return java.util.Optional.ofNullable(binary); + } + + + @JsonProperty(value = JSON_PROPERTY_BINARY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setBinary(@Nullable File binary) { + this.binary = binary; + } + + public Foo listOfDt(List listOfDt) { + + this.listOfDt = listOfDt; + return this; + } + + public Foo addListOfDtItem(java.time.Instant listOfDtItem) { + if (this.listOfDt == null) { + this.listOfDt = new ArrayList<>(); + } + this.listOfDt.add(listOfDtItem); + return this; + } + + /** + * Get listOfDt + * @return listOfDt + */ + + @JsonProperty(value = JSON_PROPERTY_LIST_OF_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional> getListOfDt() { + return java.util.Optional.ofNullable(listOfDt); + } + + + @JsonProperty(value = JSON_PROPERTY_LIST_OF_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setListOfDt(List listOfDt) { + this.listOfDt = listOfDt; + } + + public Foo listMinIntems(List listMinIntems) { + + this.listMinIntems = listMinIntems; + return this; + } + + public Foo addListMinIntemsItem(java.time.Instant listMinIntemsItem) { + if (this.listMinIntems == null) { + this.listMinIntems = new ArrayList<>(); + } + this.listMinIntems.add(listMinIntemsItem); + return this; + } + + /** + * Get listMinIntems + * @return listMinIntems + */ + + @JsonProperty(value = JSON_PROPERTY_LIST_MIN_INTEMS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional> getListMinIntems() { + return java.util.Optional.ofNullable(listMinIntems); + } + + + @JsonProperty(value = JSON_PROPERTY_LIST_MIN_INTEMS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setListMinIntems(List listMinIntems) { + this.listMinIntems = listMinIntems; + } + + public Foo requiredDt(java.time.Instant requiredDt) { + + this.requiredDt = requiredDt; + return this; + } + + /** + * Get requiredDt + * @return requiredDt + */ + + @JsonProperty(value = JSON_PROPERTY_REQUIRED_DT, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public java.time.Instant getRequiredDt() { + return requiredDt; + } + + + @JsonProperty(value = JSON_PROPERTY_REQUIRED_DT, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setRequiredDt(java.time.Instant requiredDt) { + this.requiredDt = requiredDt; + } + + public Foo number(java.math.@Nullable BigDecimal number) { + + this.number = number; + return this; + } + + /** + * Get number + * @return number + */ + + @JsonProperty(value = JSON_PROPERTY_NUMBER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNumber() { + return java.util.Optional.ofNullable(number); + } + + + @JsonProperty(value = JSON_PROPERTY_NUMBER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNumber(java.math.@Nullable BigDecimal number) { + this.number = number; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Foo foo = (Foo) o; + return Objects.equals(this.dt, foo.dt) && + Objects.equals(this.binary, foo.binary) && + Objects.equals(this.listOfDt, foo.listOfDt) && + Objects.equals(this.listMinIntems, foo.listMinIntems) && + Objects.equals(this.requiredDt, foo.requiredDt) && + Objects.equals(this.number, foo.number); + } + + @Override + public int hashCode() { + return Objects.hash(dt, binary, listOfDt, listMinIntems, requiredDt, number); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Foo {\n"); + sb.append(" dt: ").append(toIndentedString(dt)).append("\n"); + sb.append(" binary: ").append(toIndentedString(binary)).append("\n"); + sb.append(" listOfDt: ").append(toIndentedString(listOfDt)).append("\n"); + sb.append(" listMinIntems: ").append(toIndentedString(listMinIntems)).append("\n"); + sb.append(" requiredDt: ").append(toIndentedString(requiredDt)).append("\n"); + sb.append(" number: ").append(toIndentedString(number)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } + +} + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/package-info.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/package-info.java new file mode 100644 index 000000000000..774ca336f509 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package org.openapitools.client.model; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/package-info.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/package-info.java new file mode 100644 index 000000000000..9c547369c362 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package org.openapitools.client; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/DefaultApiTest.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/DefaultApiTest.java new file mode 100644 index 000000000000..66be53dd562a --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/DefaultApiTest.java @@ -0,0 +1,83 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import java.io.File; +import org.openapitools.client.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * API tests for DefaultApi + */ +@Disabled +public class DefaultApiTest { + + private final DefaultApi api = new DefaultApi(); + + + /** + * + * + * + */ + @Test + public void fileIdGetTest() { + // uncomment below to test the function + //String id = null; + //api.fileIdGet(id).block(); + + // TODO: test validations + } + + /** + * + * + * + */ + @Test + public void fooDtParamGetTest() { + // uncomment below to test the function + //java.time.Instant dtParam = null; + //java.time.Instant dtQuery = null; + //java.time.Instant dtCookie = null; + //Foo response = api.fooDtParamGet(dtParam, dtQuery, dtCookie).block(); + + // TODO: test validations + } + + /** + * + * + * + */ + @Test + public void uploadPostTest() { + // uncomment below to test the function + //File _file = null; + //api.uploadPost(_file).block(); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FooTest.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FooTest.java new file mode 100644 index 000000000000..66ed819a0c83 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FooTest.java @@ -0,0 +1,93 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.io.File; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +/** + * Model tests for Foo + */ +class FooTest { + private final Foo model = new Foo(); + + /** + * Model tests for Foo + */ + @Test + void testFoo() { + // TODO: test Foo + } + + /** + * Test the property 'dt' + */ + @Test + void dtTest() { + // TODO: test dt + } + + /** + * Test the property 'binary' + */ + @Test + void binaryTest() { + // TODO: test binary + } + + /** + * Test the property 'listOfDt' + */ + @Test + void listOfDtTest() { + // TODO: test listOfDt + } + + /** + * Test the property 'listMinIntems' + */ + @Test + void listMinIntemsTest() { + // TODO: test listMinIntems + } + + /** + * Test the property 'requiredDt' + */ + @Test + void requiredDtTest() { + // TODO: test requiredDt + } + + /** + * Test the property 'number' + */ + @Test + void numberTest() { + // TODO: test number + } + +} diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator-ignore b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/FILES b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/FILES new file mode 100644 index 000000000000..632e71aef704 --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/FILES @@ -0,0 +1,9 @@ +README.md +pom.xml +src/main/java/org/openapitools/api/ApiUtil.java +src/main/java/org/openapitools/api/FileApi.java +src/main/java/org/openapitools/api/FooApi.java +src/main/java/org/openapitools/api/UploadApi.java +src/main/java/org/openapitools/api/package-info.java +src/main/java/org/openapitools/model/Foo.java +src/main/java/org/openapitools/model/package-info.java diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/VERSION b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/VERSION new file mode 100644 index 000000000000..186c33c96ed8 --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.24.0-SNAPSHOT diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/README.md b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/README.md new file mode 100644 index 000000000000..d43a1de307df --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/README.md @@ -0,0 +1,27 @@ + +# OpenAPI generated API stub + +Spring Framework stub + + +## Overview +This code was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. +By using the [OpenAPI-Spec](https://openapis.org), you can easily generate an API stub. +This is an example of building API stub interfaces in Java using the Spring framework. + +The stubs generated can be used in your existing Spring-MVC or Spring-Boot application to create controller endpoints +by adding ```@Controller``` classes that implement the interface. Eg: +```java +@Controller +public class PetController implements PetApi { +// implement all PetApi methods +} +``` + +You can also use the interface to create [Spring-Cloud Feign clients](http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign-inheritance).Eg: +```java +@FeignClient(name="pet", url="http://petstore.swagger.io/v2") +public interface PetClient extends PetApi { + +} +``` diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/pom.xml b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/pom.xml new file mode 100644 index 000000000000..85dde2399339 --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/pom.xml @@ -0,0 +1,87 @@ + + 4.0.0 + org.openapitools.openapi3 + springboot-optional-getters + jar + springboot-optional-getters + 1.0.0-SNAPSHOT + + 17 + ${java.version} + UTF-8 + 2.6.0 + 5.17.14 + + + org.springframework.boot + spring-boot-starter-parent + 4.0.1 + + + + + src/main/java + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + + + + + + org.springframework.boot + spring-boot-starter-webmvc + + + org.springframework.boot + spring-boot-starter-restclient + + + org.springframework.data + spring-data-commons + + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + ${springdoc.version} + + + + jakarta.xml.bind + jakarta.xml.bind-api + + + tools.jackson.dataformat + jackson-dataformat-xml + + + + org.springframework.boot + spring-boot-starter-validation + + + tools.jackson.core + jackson-databind + + + org.springframework.boot + spring-boot-starter-webmvc-test + test + + + org.springframework.boot + spring-boot-starter-restclient + test + + + diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/ApiUtil.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/ApiUtil.java new file mode 100644 index 000000000000..44bf770ccc47 --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/ApiUtil.java @@ -0,0 +1,21 @@ +package org.openapitools.api; + +import org.springframework.web.context.request.NativeWebRequest; + +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class ApiUtil { + public static void setExampleResponse(NativeWebRequest req, String contentType, String example) { + try { + HttpServletResponse res = req.getNativeResponse(HttpServletResponse.class); + if (res != null) { + res.setCharacterEncoding("UTF-8"); + res.addHeader("Content-Type", contentType); + res.getWriter().print(example); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FileApi.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FileApi.java new file mode 100644 index 000000000000..9f5b9cc53317 --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FileApi.java @@ -0,0 +1,68 @@ +/* + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.24.0-SNAPSHOT). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.api; + +import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.multipart.MultipartFile; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.*; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import jakarta.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@Validated +@Tag(name = "file", description = "the file API") +public interface FileApi { + + default Optional getRequest() { + return Optional.empty(); + } + + String PATH_FILE_ID_GET = "/file/{id}"; + /** + * GET /file/{id} + * + * @param id (required) + * @return ok (status code 200) + */ + @Operation( + operationId = "fileIdGet", + responses = { + @ApiResponse(responseCode = "200", description = "ok") + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = FileApi.PATH_FILE_ID_GET + ) + default ResponseEntity fileIdGet( + @Parameter(name = "id", description = "", required = true, in = ParameterIn.PATH) @PathVariable("id") String id + ) { + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + +} diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FooApi.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FooApi.java new file mode 100644 index 000000000000..cdbcd3080e7f --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FooApi.java @@ -0,0 +1,88 @@ +/* + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.24.0-SNAPSHOT). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.api; + +import org.springframework.format.annotation.DateTimeFormat; +import org.openapitools.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; +import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.multipart.MultipartFile; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.*; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import jakarta.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@Validated +@Tag(name = "foo", description = "the foo API") +public interface FooApi { + + default Optional getRequest() { + return Optional.empty(); + } + + String PATH_FOO_DT_PARAM_GET = "/foo/{dtParam}"; + /** + * GET /foo/{dtParam} + * + * @param dtParam (optional) + * @param dtQuery (optional) + * @param dtCookie (optional) + * @return response (status code 200) + */ + @Operation( + operationId = "fooDtParamGet", + responses = { + @ApiResponse(responseCode = "default", description = "response", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = Foo.class)) + }) + } + ) + @RequestMapping( + method = RequestMethod.GET, + value = FooApi.PATH_FOO_DT_PARAM_GET, + produces = { "application/json" } + ) + default ResponseEntity fooDtParamGet( + @Parameter(name = "dtParam", description = "", in = ParameterIn.PATH) @PathVariable("dtParam") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) @Nullable OffsetDateTime dtParam, + @Parameter(name = "dtQuery", description = "", in = ParameterIn.QUERY) @Valid @RequestParam(value = "dtQuery", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) @Nullable OffsetDateTime dtQuery, + @Parameter(name = "dtCookie", description = "", in = ParameterIn.COOKIE) @CookieValue(name = "dtCookie", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) @Nullable OffsetDateTime dtCookie + ) { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "{ \"dt\" : \"2000-01-23T04:56:07.000+00:00\", \"binary\" : \"\", \"listOfDt\" : [ \"2000-01-23T04:56:07.000+00:00\", \"2000-01-23T04:56:07.000+00:00\" ], \"listMinIntems\" : [ \"2000-01-23T04:56:07.000+00:00\", \"2000-01-23T04:56:07.000+00:00\" ], \"requiredDt\" : \"2000-01-23T04:56:07.000+00:00\", \"number\" : 0.8008281904610115 }"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + } + }); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + +} diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadApi.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadApi.java new file mode 100644 index 000000000000..f3028378f132 --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadApi.java @@ -0,0 +1,70 @@ +/* + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.24.0-SNAPSHOT). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.api; + +import org.jspecify.annotations.Nullable; +import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.multipart.MultipartFile; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.*; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import jakarta.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@Validated +@Tag(name = "upload", description = "the upload API") +public interface UploadApi { + + default Optional getRequest() { + return Optional.empty(); + } + + String PATH_UPLOAD_POST = "/upload"; + /** + * POST /upload + * + * @param file (optional) + * @return ok (status code 200) + */ + @Operation( + operationId = "uploadPost", + responses = { + @ApiResponse(responseCode = "default", description = "ok") + } + ) + @RequestMapping( + method = RequestMethod.POST, + value = UploadApi.PATH_UPLOAD_POST, + consumes = { "multipart/form-data" } + ) + default ResponseEntity uploadPost( + @Parameter(name = "file", description = "") @RequestPart(value = "file", required = false) MultipartFile file + ) { + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + +} diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/package-info.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/package-info.java new file mode 100644 index 000000000000..46e4608c520d --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package org.openapitools.api; diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/Foo.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/Foo.java new file mode 100644 index 000000000000..cf38623d11e9 --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/Foo.java @@ -0,0 +1,383 @@ +package org.openapitools.model; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; +import java.math.BigDecimal; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.OffsetDateTime; +import jakarta.validation.Valid; +import jakarta.validation.constraints.*; +import tools.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import tools.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import tools.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import io.swagger.v3.oas.annotations.media.Schema; + +import jakarta.xml.bind.annotation.*; + +import java.util.*; +import jakarta.annotation.Generated; + +/** + * Foo + */ + +@JacksonXmlRootElement(localName = "Foo") +@XmlRootElement(name = "Foo") +@XmlAccessorType(XmlAccessType.FIELD) +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +public class Foo { + + @JsonInclude(JsonInclude.Include.NON_NULL) + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) + private @Nullable OffsetDateTime dt; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private org.springframework.core.io.@Nullable Resource binary; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private List listOfDt = new ArrayList<>(); + + @JsonInclude(JsonInclude.Include.NON_NULL) + private List listMinIntems = new ArrayList<>(); + + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) + private OffsetDateTime requiredDt; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private @Nullable BigDecimal number; + + public Foo() { + super(); + } + + /** + * Constructor with only required parameters + */ + public Foo(OffsetDateTime requiredDt) { + this.requiredDt = requiredDt; + } + + /** + * Constructor with all args parameters + */ + public Foo(OffsetDateTime dt, org.springframework.core.io.Resource binary, List listOfDt, List listMinIntems, OffsetDateTime requiredDt, BigDecimal number) { + this.dt = dt; + this.binary = binary; + this.listOfDt = listOfDt; + this.listMinIntems = listMinIntems; + this.requiredDt = requiredDt; + this.number = number; + } + + public Foo dt(OffsetDateTime dt) { + this.dt = dt; + return this; + } + + /** + * Get dt + * @return dt + */ + @Valid + @Schema(name = "dt", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("dt") + @JacksonXmlProperty(localName = "dt") + @XmlElement(name = "dt") + public java.util.Optional<@Nullable OffsetDateTime> getDt() { + return java.util.Optional.ofNullable(dt); + } + + @JsonSetter(nulls = Nulls.SKIP) + @JsonProperty("dt") + @JacksonXmlProperty(localName = "dt") + public void setDt(@Nullable OffsetDateTime dt) { + this.dt = dt; + } + + public Foo binary(org.springframework.core.io.Resource binary) { + this.binary = binary; + return this; + } + + /** + * Get binary + * @return binary + */ + @Valid + @Schema(name = "binary", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("binary") + @JacksonXmlProperty(localName = "binary") + @XmlElement(name = "binary") + public java.util.Optional getBinary() { + return java.util.Optional.ofNullable(binary); + } + + @JsonSetter(nulls = Nulls.SKIP) + @JsonProperty("binary") + @JacksonXmlProperty(localName = "binary") + public void setBinary(org.springframework.core.io.@Nullable Resource binary) { + this.binary = binary; + } + + public Foo listOfDt(List listOfDt) { + this.listOfDt = listOfDt; + return this; + } + + public Foo addListOfDtItem(OffsetDateTime listOfDtItem) { + if (this.listOfDt == null) { + this.listOfDt = new ArrayList<>(); + } + this.listOfDt.add(listOfDtItem); + return this; + } + + /** + * Get listOfDt + * @return listOfDt + */ + @Valid + @Schema(name = "listOfDt", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("listOfDt") + @JacksonXmlProperty(localName = "listOfDt") + @JacksonXmlElementWrapper(useWrapping = false) + @XmlElement(name = "listOfDt") + public java.util.Optional> getListOfDt() { + return java.util.Optional.ofNullable(listOfDt); + } + + @JsonSetter(nulls = Nulls.SKIP) + @JsonProperty("listOfDt") + @JacksonXmlProperty(localName = "listOfDt") + @JacksonXmlElementWrapper(useWrapping = false) + public void setListOfDt(List listOfDt) { + this.listOfDt = listOfDt; + } + + public Foo listMinIntems(List listMinIntems) { + this.listMinIntems = listMinIntems; + return this; + } + + public Foo addListMinIntemsItem(OffsetDateTime listMinIntemsItem) { + if (this.listMinIntems == null) { + this.listMinIntems = new ArrayList<>(); + } + this.listMinIntems.add(listMinIntemsItem); + return this; + } + + /** + * Get listMinIntems + * @return listMinIntems + */ + @Valid @Size(min = 1) + @Schema(name = "listMinIntems", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("listMinIntems") + @JacksonXmlProperty(localName = "listMinIntems") + @JacksonXmlElementWrapper(useWrapping = false) + @XmlElement(name = "listMinIntems") + public java.util.Optional> getListMinIntems() { + return java.util.Optional.ofNullable(listMinIntems); + } + + @JsonSetter(nulls = Nulls.SKIP) + @JsonProperty("listMinIntems") + @JacksonXmlProperty(localName = "listMinIntems") + @JacksonXmlElementWrapper(useWrapping = false) + public void setListMinIntems(List listMinIntems) { + this.listMinIntems = listMinIntems; + } + + public Foo requiredDt(OffsetDateTime requiredDt) { + this.requiredDt = requiredDt; + return this; + } + + /** + * Get requiredDt + * @return requiredDt + */ + @NotNull @Valid + @Schema(name = "requiredDt", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("requiredDt") + @JacksonXmlProperty(localName = "requiredDt") + @XmlElement(name = "requiredDt") + public OffsetDateTime getRequiredDt() { + return requiredDt; + } + + @JsonProperty("requiredDt") + @JacksonXmlProperty(localName = "requiredDt") + public void setRequiredDt(OffsetDateTime requiredDt) { + this.requiredDt = requiredDt; + } + + public Foo number(BigDecimal number) { + this.number = number; + return this; + } + + /** + * Get number + * @return number + */ + @Valid + @Schema(name = "number", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("number") + @JacksonXmlProperty(localName = "number") + @XmlElement(name = "number") + public java.util.Optional<@Nullable BigDecimal> getNumber() { + return java.util.Optional.ofNullable(number); + } + + @JsonSetter(nulls = Nulls.SKIP) + @JsonProperty("number") + @JacksonXmlProperty(localName = "number") + public void setNumber(@Nullable BigDecimal number) { + this.number = number; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Foo foo = (Foo) o; + return Objects.equals(this.dt, foo.dt) && + Objects.equals(this.binary, foo.binary) && + Objects.equals(this.listOfDt, foo.listOfDt) && + Objects.equals(this.listMinIntems, foo.listMinIntems) && + Objects.equals(this.requiredDt, foo.requiredDt) && + Objects.equals(this.number, foo.number); + } + + @Override + public int hashCode() { + return Objects.hash(dt, binary, listOfDt, listMinIntems, requiredDt, number); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class Foo {\n"); + sb.append(" dt: ").append(toIndentedString(dt)).append("\n"); + sb.append(" binary: ").append(toIndentedString(binary)).append("\n"); + sb.append(" listOfDt: ").append(toIndentedString(listOfDt)).append("\n"); + sb.append(" listMinIntems: ").append(toIndentedString(listMinIntems)).append("\n"); + sb.append(" requiredDt: ").append(toIndentedString(requiredDt)).append("\n"); + sb.append(" number: ").append(toIndentedString(number)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } + + public static class Builder { + + private Foo instance; + + public Builder() { + this(new Foo()); + } + + protected Builder(Foo instance) { + this.instance = instance; + } + + protected Builder copyOf(Foo value) { + this.instance.setDt(value.dt); + this.instance.setBinary(value.binary); + this.instance.setListOfDt(value.listOfDt); + this.instance.setListMinIntems(value.listMinIntems); + this.instance.setRequiredDt(value.requiredDt); + this.instance.setNumber(value.number); + return this; + } + + public Foo.Builder dt(OffsetDateTime dt) { + this.instance.dt(dt); + return this; + } + + public Foo.Builder binary(org.springframework.core.io.Resource binary) { + this.instance.binary(binary); + return this; + } + + public Foo.Builder listOfDt(List listOfDt) { + this.instance.listOfDt(listOfDt); + return this; + } + + public Foo.Builder listMinIntems(List listMinIntems) { + this.instance.listMinIntems(listMinIntems); + return this; + } + + public Foo.Builder requiredDt(OffsetDateTime requiredDt) { + this.instance.requiredDt(requiredDt); + return this; + } + + public Foo.Builder number(BigDecimal number) { + this.instance.number(number); + return this; + } + + /** + * returns a built Foo instance. + * + * The builder is not reusable (NullPointerException) + */ + public Foo build() { + try { + return this.instance; + } finally { + // ensure that this.instance is not reused + this.instance = null; + } + } + + @Override + public String toString() { + return getClass() + "=(" + instance + ")"; + } + } + + /** + * Create a builder with no initialized field (except for the default values). + */ + public static Foo.Builder builder() { + return new Foo.Builder(); + } + + /** + * Create a builder with a shallow copy of this instance. + */ + public Foo.Builder toBuilder() { + Foo.Builder builder = new Foo.Builder(); + return builder.copyOf(this); + } + +} + diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/package-info.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/package-info.java new file mode 100644 index 000000000000..d53d015a0286 --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package org.openapitools.model; From ecbb9cb7987e996e3420aadbc0b69be3453a4708 Mon Sep 17 00:00:00 2001 From: Jorge Date: Wed, 17 Jun 2026 11:16:59 +0200 Subject: [PATCH 07/15] feat: propagate discriminator property to subtype models for optional getters --- .../languages/AbstractJavaCodegen.java | 33 +++++++++++++++++++ .../Java/libraries/restclient/pojo.mustache | 6 ++-- .../Java/libraries/resttemplate/pojo.mustache | 6 ++-- .../Java/libraries/webclient/pojo.mustache | 6 ++-- .../main/resources/JavaSpring/pojo.mustache | 4 +-- .../java/spring/SpringCodegenTest.java | 7 ++-- .../org/openapitools/client/model/Foo.java | 10 +++--- .../org/openapitools/client/model/Foo.java | 10 +++--- .../org/openapitools/client/model/Foo.java | 10 +++--- 9 files changed, 63 insertions(+), 29 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index eebb81169fda..5ff7e64ce1fa 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -806,6 +806,39 @@ public Map postProcessAllModels(Map objs) } } + // When optionalGettersForNullableFieldsOnly is enabled, propagate isDiscriminator=true + // to subtype models that redefine a discriminator property from a parent/interface. + // Without this, the template would generate Optional for those fields, causing a + // return-type incompatibility with the abstract getter declared by the parent interface. + if (optionalGettersForNullableFieldsOnly) { + for (ModelsMap modelsAttrs : objs.values()) { + for (ModelMap mo : modelsAttrs.getModels()) { + CodegenModel cm = mo.getModel(); + if (cm.discriminator != null) { + String discPropName = cm.discriminator.getPropertyBaseName(); + // propagate to all known subtype models + if (cm.discriminator.getMappedModels() != null) { + for (CodegenDiscriminator.MappedModel mapped : cm.discriminator.getMappedModels()) { + CodegenModel subModel = allModels.get(mapped.getModelName()); + if (subModel != null) { + for (CodegenProperty var : subModel.vars) { + if (discPropName.equals(var.baseName)) { + var.isDiscriminator = true; + } + } + for (CodegenProperty var : subModel.allVars) { + if (discPropName.equals(var.baseName)) { + var.isDiscriminator = true; + } + } + } + } + } + } + } + } + } + if (isGenerateConstructorWithAllArgs()) { // conditionally force the generation of all args constructor. for (CodegenModel cm : allModels.values()) { diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache index 05a88c91dfa6..3db09fabb385 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/restclient/pojo.mustache @@ -218,7 +218,7 @@ public {{>sealed}}class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#v {{#deprecated}} @Deprecated {{/deprecated}} - {{>nullable_var_annotations}}{{! prevent indent}} + {{^optionalGettersForNullableFieldsOnly}}{{>nullable_var_annotations}}{{/optionalGettersForNullableFieldsOnly}}{{#optionalGettersForNullableFieldsOnly}}{{#required}}{{>nullable_var_annotations}}{{/required}}{{^required}}{{#isInherited}}{{>nullable_var_annotations}}{{/isInherited}}{{#isDiscriminator}}{{>nullable_var_annotations}}{{/isDiscriminator}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{! prevent indent}} {{#jsonb}} @JsonbProperty("{{baseName}}") {{/jsonb}} @@ -240,12 +240,12 @@ public {{>sealed}}class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#v @JsonIgnore {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} - public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDatatypeWithEnum}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { + public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isInherited}}{{^isDiscriminator}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/isDiscriminator}}{{/isInherited}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDatatypeWithEnum}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isInherited}}{{^isDiscriminator}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/isDiscriminator}}{{/isInherited}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { {{#vendorExtensions.x-is-jackson-optional-nullable}}{{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} if ({{name}} == null) { {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; } - {{/isReadOnly}}return {{name}}.orElse(null);{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}return {{#optionalGettersForNullableFieldsOnly}}{{^required}}java.util.Optional.ofNullable({{name}}){{/required}}{{#required}}{{name}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}{{name}}{{/optionalGettersForNullableFieldsOnly}};{{/vendorExtensions.x-is-jackson-optional-nullable}} + {{/isReadOnly}}return {{name}}.orElse(null);{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}return {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isInherited}}{{^isDiscriminator}}java.util.Optional.ofNullable({{name}}){{/isDiscriminator}}{{#isDiscriminator}}{{name}}{{/isDiscriminator}}{{/isInherited}}{{#isInherited}}{{name}}{{/isInherited}}{{/required}}{{#required}}{{name}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}{{name}}{{/optionalGettersForNullableFieldsOnly}};{{/vendorExtensions.x-is-jackson-optional-nullable}} } {{#vendorExtensions.x-is-jackson-optional-nullable}} diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache index 115772976786..76f583315154 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/pojo.mustache @@ -218,7 +218,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens {{#deprecated}} @Deprecated {{/deprecated}} - {{>nullable_var_annotations}}{{! prevent indent}} + {{^optionalGettersForNullableFieldsOnly}}{{>nullable_var_annotations}}{{/optionalGettersForNullableFieldsOnly}}{{#optionalGettersForNullableFieldsOnly}}{{#required}}{{>nullable_var_annotations}}{{/required}}{{^required}}{{#isInherited}}{{>nullable_var_annotations}}{{/isInherited}}{{#isDiscriminator}}{{>nullable_var_annotations}}{{/isDiscriminator}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{! prevent indent}} {{#jsonb}} @JsonbProperty("{{baseName}}") {{/jsonb}} @@ -240,12 +240,12 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens @JsonIgnore {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} - public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDatatypeWithEnum}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { + public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isInherited}}{{^isDiscriminator}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/isDiscriminator}}{{/isInherited}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDatatypeWithEnum}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isInherited}}{{^isDiscriminator}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/isDiscriminator}}{{/isInherited}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { {{#vendorExtensions.x-is-jackson-optional-nullable}}{{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} if ({{name}} == null) { {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; } - {{/isReadOnly}}return {{name}}.orElse(null);{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}return {{#optionalGettersForNullableFieldsOnly}}{{^required}}java.util.Optional.ofNullable({{name}}){{/required}}{{#required}}{{name}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}{{name}}{{/optionalGettersForNullableFieldsOnly}};{{/vendorExtensions.x-is-jackson-optional-nullable}} + {{/isReadOnly}}return {{name}}.orElse(null);{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}return {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isInherited}}{{^isDiscriminator}}java.util.Optional.ofNullable({{name}}){{/isDiscriminator}}{{#isDiscriminator}}{{name}}{{/isDiscriminator}}{{/isInherited}}{{#isInherited}}{{name}}{{/isInherited}}{{/required}}{{#required}}{{name}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}{{name}}{{/optionalGettersForNullableFieldsOnly}};{{/vendorExtensions.x-is-jackson-optional-nullable}} } {{#vendorExtensions.x-is-jackson-optional-nullable}} diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache index f5f8e8d1f2d6..8005973ce6b9 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/webclient/pojo.mustache @@ -218,7 +218,7 @@ public {{>sealed}}class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#v {{#deprecated}} @Deprecated {{/deprecated}} - {{>nullable_var_annotations}}{{! prevent indent}} + {{^optionalGettersForNullableFieldsOnly}}{{>nullable_var_annotations}}{{/optionalGettersForNullableFieldsOnly}}{{#optionalGettersForNullableFieldsOnly}}{{#required}}{{>nullable_var_annotations}}{{/required}}{{^required}}{{#isInherited}}{{>nullable_var_annotations}}{{/isInherited}}{{#isDiscriminator}}{{>nullable_var_annotations}}{{/isDiscriminator}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{! prevent indent}} {{#jsonb}} @JsonbProperty("{{baseName}}") {{/jsonb}} @@ -240,12 +240,12 @@ public {{>sealed}}class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#v @JsonIgnore {{/vendorExtensions.x-is-jackson-optional-nullable}} {{^vendorExtensions.x-is-jackson-optional-nullable}}{{#jackson}}{{> jackson_annotations}}{{/jackson}}{{/vendorExtensions.x-is-jackson-optional-nullable}} - public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDatatypeWithEnum}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { + public {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isInherited}}{{^isDiscriminator}}{{^vendorExtensions.x-is-jackson-optional-nullable}}java.util.Optional<{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/isDiscriminator}}{{/isInherited}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDatatypeWithEnum}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isInherited}}{{^isDiscriminator}}{{^vendorExtensions.x-is-jackson-optional-nullable}}>{{/vendorExtensions.x-is-jackson-optional-nullable}}{{/isDiscriminator}}{{/isInherited}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { {{#vendorExtensions.x-is-jackson-optional-nullable}}{{#isReadOnly}}{{! A readonly attribute doesn't have setter => jackson will set null directly if explicitly returned by API, so make sure we have an empty JsonNullable}} if ({{name}} == null) { {{name}} = JsonNullable.<{{{datatypeWithEnum}}}>{{#defaultValue}}of({{{.}}}){{/defaultValue}}{{^defaultValue}}undefined(){{/defaultValue}}; } - {{/isReadOnly}}return {{name}}.orElse(null);{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}return {{#optionalGettersForNullableFieldsOnly}}{{^required}}java.util.Optional.ofNullable({{name}}){{/required}}{{#required}}{{name}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}{{name}}{{/optionalGettersForNullableFieldsOnly}};{{/vendorExtensions.x-is-jackson-optional-nullable}} + {{/isReadOnly}}return {{name}}.orElse(null);{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}return {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isInherited}}{{^isDiscriminator}}java.util.Optional.ofNullable({{name}}){{/isDiscriminator}}{{#isDiscriminator}}{{name}}{{/isDiscriminator}}{{/isInherited}}{{#isInherited}}{{name}}{{/isInherited}}{{/required}}{{#required}}{{name}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}{{name}}{{/optionalGettersForNullableFieldsOnly}};{{/vendorExtensions.x-is-jackson-optional-nullable}} } {{#vendorExtensions.x-is-jackson-optional-nullable}} diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache index 17ae34072af8..356e13699c95 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache @@ -235,8 +235,8 @@ public {{>sealed}}class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}} {{#deprecated}} @Deprecated {{/deprecated}} -{{#jackson}}{{>jackson_annotations}}{{/jackson}}{{#withXml}}{{>xmlAccessorAnnotation}}{{/withXml}} public {{>nullableAnnotation}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isNullable}}java.util.Optional<{{/isNullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDataTypeBeanValidation}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isNullable}}>{{/isNullable}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { - {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isNullable}}return java.util.Optional.ofNullable({{name}});{{/isNullable}}{{#isNullable}}return {{name}};{{/isNullable}}{{/required}}{{#required}}return {{name}};{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}return {{name}};{{/optionalGettersForNullableFieldsOnly}} +{{#jackson}}{{>jackson_annotations}}{{/jackson}}{{#withXml}}{{>xmlAccessorAnnotation}}{{/withXml}} public {{^optionalGettersForNullableFieldsOnly}}{{>nullableAnnotation}}{{/optionalGettersForNullableFieldsOnly}}{{#optionalGettersForNullableFieldsOnly}}{{#required}}{{>nullableAnnotation}}{{/required}}{{^required}}{{#isInherited}}{{>nullableAnnotation}}{{/isInherited}}{{#isDiscriminator}}{{>nullableAnnotation}}{{/isDiscriminator}}{{^isInherited}}{{^isDiscriminator}}{{^isNullable}}java.util.Optional<{{/isNullable}}{{/isDiscriminator}}{{/isInherited}}{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{>nullableDataTypeBeanValidation}}{{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isInherited}}{{^isDiscriminator}}{{^isNullable}}>{{/isNullable}}{{/isDiscriminator}}{{/isInherited}}{{/required}}{{/optionalGettersForNullableFieldsOnly}} {{getter}}() { + {{#optionalGettersForNullableFieldsOnly}}{{^required}}{{^isInherited}}{{^isDiscriminator}}{{^isNullable}}return java.util.Optional.ofNullable({{name}});{{/isNullable}}{{#isNullable}}return {{name}};{{/isNullable}}{{/isDiscriminator}}{{#isDiscriminator}}return {{name}};{{/isDiscriminator}}{{/isInherited}}{{#isInherited}}return {{name}};{{/isInherited}}{{/required}}{{#required}}return {{name}};{{/required}}{{/optionalGettersForNullableFieldsOnly}}{{^optionalGettersForNullableFieldsOnly}}return {{name}};{{/optionalGettersForNullableFieldsOnly}} } {{/lombok.Getter}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index 648ad7685ecf..0b28e537f581 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -5382,15 +5382,16 @@ void testOptionalGettersForNullableFieldsOnly() throws IOException { ) ); - // Non-required, non-nullable fields: getter returns Optional, field and setter stay raw. + // Non-required, non-nullable fields: getter returns Optional without @Nullable, field and setter stay raw. JavaFileAssert.assertThat(files.get("SimpleObject.java")) .fileContains( - "public @Nullable java.util.Optional getSimple() {", + "public java.util.Optional getSimple() {", "return java.util.Optional.ofNullable(simple);", "private @Nullable String simple;", "public void setSimple(@Nullable String simple) {") - // The backing field and setter must remain the raw type, never Optional. + // @Nullable must NOT appear on the getter returning Optional (invalid with jspecify). .fileDoesNotContain( + "public @Nullable java.util.Optional getSimple()", "private @Nullable java.util.Optional simple;", "public void setSimple(java.util.Optional simple)"); diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java index 4d374ab90bdd..8a71b71e535a 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java @@ -84,7 +84,7 @@ public Foo dt(java.time.@Nullable Instant dt) { @JsonProperty(value = JSON_PROPERTY_DT, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional getDt() { + public java.util.Optional getDt() { return java.util.Optional.ofNullable(dt); } @@ -109,7 +109,7 @@ public Foo binary(@Nullable File binary) { @JsonProperty(value = JSON_PROPERTY_BINARY, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional<@Nullable File> getBinary() { + public java.util.Optional getBinary() { return java.util.Optional.ofNullable(binary); } @@ -142,7 +142,7 @@ public Foo addListOfDtItem(java.time.Instant listOfDtItem) { @JsonProperty(value = JSON_PROPERTY_LIST_OF_DT, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional> getListOfDt() { + public java.util.Optional> getListOfDt() { return java.util.Optional.ofNullable(listOfDt); } @@ -175,7 +175,7 @@ public Foo addListMinIntemsItem(java.time.Instant listMinIntemsItem) { @JsonProperty(value = JSON_PROPERTY_LIST_MIN_INTEMS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional> getListMinIntems() { + public java.util.Optional> getListMinIntems() { return java.util.Optional.ofNullable(listMinIntems); } @@ -225,7 +225,7 @@ public Foo number(java.math.@Nullable BigDecimal number) { @JsonProperty(value = JSON_PROPERTY_NUMBER, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional getNumber() { + public java.util.Optional getNumber() { return java.util.Optional.ofNullable(number); } diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java index 4d374ab90bdd..8a71b71e535a 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java @@ -84,7 +84,7 @@ public Foo dt(java.time.@Nullable Instant dt) { @JsonProperty(value = JSON_PROPERTY_DT, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional getDt() { + public java.util.Optional getDt() { return java.util.Optional.ofNullable(dt); } @@ -109,7 +109,7 @@ public Foo binary(@Nullable File binary) { @JsonProperty(value = JSON_PROPERTY_BINARY, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional<@Nullable File> getBinary() { + public java.util.Optional getBinary() { return java.util.Optional.ofNullable(binary); } @@ -142,7 +142,7 @@ public Foo addListOfDtItem(java.time.Instant listOfDtItem) { @JsonProperty(value = JSON_PROPERTY_LIST_OF_DT, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional> getListOfDt() { + public java.util.Optional> getListOfDt() { return java.util.Optional.ofNullable(listOfDt); } @@ -175,7 +175,7 @@ public Foo addListMinIntemsItem(java.time.Instant listMinIntemsItem) { @JsonProperty(value = JSON_PROPERTY_LIST_MIN_INTEMS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional> getListMinIntems() { + public java.util.Optional> getListMinIntems() { return java.util.Optional.ofNullable(listMinIntems); } @@ -225,7 +225,7 @@ public Foo number(java.math.@Nullable BigDecimal number) { @JsonProperty(value = JSON_PROPERTY_NUMBER, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional getNumber() { + public java.util.Optional getNumber() { return java.util.Optional.ofNullable(number); } diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java index 68ca96733f98..b4d8fcfb741c 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java @@ -83,7 +83,7 @@ public Foo dt(java.time.@Nullable Instant dt) { @JsonProperty(value = JSON_PROPERTY_DT, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional getDt() { + public java.util.Optional getDt() { return java.util.Optional.ofNullable(dt); } @@ -108,7 +108,7 @@ public Foo binary(@Nullable File binary) { @JsonProperty(value = JSON_PROPERTY_BINARY, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional<@Nullable File> getBinary() { + public java.util.Optional getBinary() { return java.util.Optional.ofNullable(binary); } @@ -141,7 +141,7 @@ public Foo addListOfDtItem(java.time.Instant listOfDtItem) { @JsonProperty(value = JSON_PROPERTY_LIST_OF_DT, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional> getListOfDt() { + public java.util.Optional> getListOfDt() { return java.util.Optional.ofNullable(listOfDt); } @@ -174,7 +174,7 @@ public Foo addListMinIntemsItem(java.time.Instant listMinIntemsItem) { @JsonProperty(value = JSON_PROPERTY_LIST_MIN_INTEMS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional> getListMinIntems() { + public java.util.Optional> getListMinIntems() { return java.util.Optional.ofNullable(listMinIntems); } @@ -224,7 +224,7 @@ public Foo number(java.math.@Nullable BigDecimal number) { @JsonProperty(value = JSON_PROPERTY_NUMBER, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public java.util.Optional getNumber() { + public java.util.Optional getNumber() { return java.util.Optional.ofNullable(number); } From e32abbbb91933802d3dd5a95ffbbc978c70cccee Mon Sep 17 00:00:00 2001 From: Jorge Date: Wed, 17 Jun 2026 11:42:43 +0200 Subject: [PATCH 08/15] feat: update optional getters description for non-required fields --- docs/generators/groovy.md | 2 +- docs/generators/java-camel.md | 2 +- docs/generators/java-dubbo.md | 2 +- docs/generators/java-helidon-client.md | 2 +- docs/generators/java-helidon-server.md | 2 +- docs/generators/java-inflector.md | 2 +- docs/generators/java-micronaut-client.md | 2 +- docs/generators/java-micronaut-server.md | 2 +- docs/generators/java-microprofile.md | 2 +- docs/generators/java-msf4j.md | 2 +- docs/generators/java-pkmst.md | 2 +- docs/generators/java-play-framework.md | 2 +- docs/generators/java-undertow-server.md | 2 +- docs/generators/java-vertx-web.md | 2 +- docs/generators/java-vertx.md | 2 +- docs/generators/java-wiremock.md | 2 +- docs/generators/java.md | 2 +- docs/generators/jaxrs-cxf-cdi.md | 2 +- docs/generators/jaxrs-cxf-client.md | 2 +- docs/generators/jaxrs-cxf-extended.md | 2 +- docs/generators/jaxrs-cxf.md | 2 +- docs/generators/jaxrs-jersey.md | 2 +- docs/generators/jaxrs-resteasy-eap.md | 2 +- docs/generators/jaxrs-resteasy.md | 2 +- docs/generators/jaxrs-spec.md | 2 +- docs/generators/spring.md | 2 +- .../org/openapitools/codegen/languages/AbstractJavaCodegen.java | 2 +- 27 files changed, 27 insertions(+), 27 deletions(-) diff --git a/docs/generators/groovy.md b/docs/generators/groovy.md index fb5c44f66cc9..cba2999ff997 100644 --- a/docs/generators/groovy.md +++ b/docs/generators/groovy.md @@ -55,7 +55,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-camel.md b/docs/generators/java-camel.md index dc8c2a8a50ce..498cf1c91391 100644 --- a/docs/generators/java-camel.md +++ b/docs/generators/java-camel.md @@ -83,7 +83,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |optionalAcceptNullable|Use `ofNullable` instead of just `of` to accept null values when using Optional.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-dubbo.md b/docs/generators/java-dubbo.md index 2a5405590e6d..abf916d56b7e 100644 --- a/docs/generators/java-dubbo.md +++ b/docs/generators/java-dubbo.md @@ -62,7 +62,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-helidon-client.md b/docs/generators/java-helidon-client.md index 5921d8dd112c..798cd176c5ad 100644 --- a/docs/generators/java-helidon-client.md +++ b/docs/generators/java-helidon-client.md @@ -56,7 +56,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.client.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |rootJavaEEPackage|Root package name for Java EE| |Helidon 2.x and earlier: javax; Helidon 3.x and later: jakarta| |serializableModel|boolean - toggle "implements Serializable" for generated models| |false| diff --git a/docs/generators/java-helidon-server.md b/docs/generators/java-helidon-server.md index 0c595dd117ed..7548c7a63844 100644 --- a/docs/generators/java-helidon-server.md +++ b/docs/generators/java-helidon-server.md @@ -56,7 +56,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.server.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |performBeanValidation|Perform BeanValidation| |false| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |rootJavaEEPackage|Root package name for Java EE| |Helidon 2.x and earlier: javax; Helidon 3.x and later: jakarta| diff --git a/docs/generators/java-inflector.md b/docs/generators/java-inflector.md index 71f86c54742b..451892ec9d40 100644 --- a/docs/generators/java-inflector.md +++ b/docs/generators/java-inflector.md @@ -57,7 +57,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-micronaut-client.md b/docs/generators/java-micronaut-client.md index d27834cb2d1b..ae21ee0d4a1e 100644 --- a/docs/generators/java-micronaut-client.md +++ b/docs/generators/java-micronaut-client.md @@ -69,7 +69,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |micronautVersion|Micronaut version, only >=3.0.0 versions are supported| |3.4.3| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-micronaut-server.md b/docs/generators/java-micronaut-server.md index 2d35a52ad03b..8e1c9324192b 100644 --- a/docs/generators/java-micronaut-server.md +++ b/docs/generators/java-micronaut-server.md @@ -67,7 +67,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |micronautVersion|Micronaut version, only >=3.0.0 versions are supported| |3.4.3| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-microprofile.md b/docs/generators/java-microprofile.md index 36901a988d85..af74362d2ebb 100644 --- a/docs/generators/java-microprofile.md +++ b/docs/generators/java-microprofile.md @@ -74,7 +74,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |microprofileRestClientVersion|Version of MicroProfile Rest Client API.| |null| |modelPackage|package for generated models| |org.openapitools.client.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parcelableModel|Whether to generate models for Android that implement Parcelable with the okhttp-gson library.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-msf4j.md b/docs/generators/java-msf4j.md index ea486b97bc2b..fd1280b7caf0 100644 --- a/docs/generators/java-msf4j.md +++ b/docs/generators/java-msf4j.md @@ -59,7 +59,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-pkmst.md b/docs/generators/java-pkmst.md index e445748737d5..72f83fb196c0 100644 --- a/docs/generators/java-pkmst.md +++ b/docs/generators/java-pkmst.md @@ -59,7 +59,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |com.prokarma.pkmst.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-play-framework.md b/docs/generators/java-play-framework.md index 68fcf67a5e1d..86a9ed5af765 100644 --- a/docs/generators/java-play-framework.md +++ b/docs/generators/java-play-framework.md @@ -61,7 +61,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |apimodels| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-undertow-server.md b/docs/generators/java-undertow-server.md index 1ea4fe3b65a0..bce730abc694 100644 --- a/docs/generators/java-undertow-server.md +++ b/docs/generators/java-undertow-server.md @@ -57,7 +57,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |null| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-vertx-web.md b/docs/generators/java-vertx-web.md index 8e3cecdd058c..e7a1f7868294 100644 --- a/docs/generators/java-vertx-web.md +++ b/docs/generators/java-vertx-web.md @@ -57,7 +57,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.vertxweb.server.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-vertx.md b/docs/generators/java-vertx.md index a71368c12eaf..3d99b5843822 100644 --- a/docs/generators/java-vertx.md +++ b/docs/generators/java-vertx.md @@ -57,7 +57,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.server.api.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-wiremock.md b/docs/generators/java-wiremock.md index 85059304eb4e..10749a33412b 100644 --- a/docs/generators/java-wiremock.md +++ b/docs/generators/java-wiremock.md @@ -57,7 +57,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |null| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java.md b/docs/generators/java.md index 23d5b8f04f68..db1415f54b89 100644 --- a/docs/generators/java.md +++ b/docs/generators/java.md @@ -74,7 +74,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |microprofileRestClientVersion|Version of MicroProfile Rest Client API.| |null| |modelPackage|package for generated models| |org.openapitools.client.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parcelableModel|Whether to generate models for Android that implement Parcelable with the okhttp-gson library.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-cxf-cdi.md b/docs/generators/jaxrs-cxf-cdi.md index 45495f49a74c..7d03c0663203 100644 --- a/docs/generators/jaxrs-cxf-cdi.md +++ b/docs/generators/jaxrs-cxf-cdi.md @@ -62,7 +62,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |openApiSpecFileLocation|Location where the file containing the spec will be generated in the output folder. No file generated when set to null or empty string.| |null| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-cxf-client.md b/docs/generators/jaxrs-cxf-client.md index 40ea142e8267..f0cf2bd35281 100644 --- a/docs/generators/jaxrs-cxf-client.md +++ b/docs/generators/jaxrs-cxf-client.md @@ -59,7 +59,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-cxf-extended.md b/docs/generators/jaxrs-cxf-extended.md index cc02fe09be36..047c52daeb0d 100644 --- a/docs/generators/jaxrs-cxf-extended.md +++ b/docs/generators/jaxrs-cxf-extended.md @@ -67,7 +67,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |loadTestDataFromFile|Load test data from a generated JSON file| |false| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-cxf.md b/docs/generators/jaxrs-cxf.md index 204d64c0f0bc..3faf4c2b2004 100644 --- a/docs/generators/jaxrs-cxf.md +++ b/docs/generators/jaxrs-cxf.md @@ -65,7 +65,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-jersey.md b/docs/generators/jaxrs-jersey.md index 8f7d188e2b7e..1b2566cfc7d7 100644 --- a/docs/generators/jaxrs-jersey.md +++ b/docs/generators/jaxrs-jersey.md @@ -59,7 +59,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-resteasy-eap.md b/docs/generators/jaxrs-resteasy-eap.md index 7c3f7dfedbd1..9c3e3c1a5c4c 100644 --- a/docs/generators/jaxrs-resteasy-eap.md +++ b/docs/generators/jaxrs-resteasy-eap.md @@ -59,7 +59,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-resteasy.md b/docs/generators/jaxrs-resteasy.md index 821291209df7..6fe892a9d71e 100644 --- a/docs/generators/jaxrs-resteasy.md +++ b/docs/generators/jaxrs-resteasy.md @@ -59,7 +59,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-spec.md b/docs/generators/jaxrs-spec.md index 35583a0584f2..4c325419d261 100644 --- a/docs/generators/jaxrs-spec.md +++ b/docs/generators/jaxrs-spec.md @@ -63,7 +63,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |openApiSpecFileLocation|Location where the file containing the spec will be generated in the output folder. No file generated when set to null or empty string.| |null| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/spring.md b/docs/generators/spring.md index 56a43355f82a..6e8359d37a3d 100644 --- a/docs/generators/spring.md +++ b/docs/generators/spring.md @@ -76,7 +76,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |optionalAcceptNullable|Use `ofNullable` instead of just `of` to accept null values when using Optional.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of nullable / non-required fields return Optional<T> while keeping the field and setter as the raw type. Opt-in, disabled by default.| |false| +|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index 5ff7e64ce1fa..35a870b6a1ad 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -373,7 +373,7 @@ public AbstractJavaCodegen() { cliOptions.add(CliOption.newBoolean(CONTAINER_DEFAULT_TO_NULL, "Set containers (array, set, map) default to null")); cliOptions.add(CliOption.newBoolean(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, "whether to generate a constructor for all arguments").defaultValue(Boolean.FALSE.toString())); cliOptions.add(CliOption.newBoolean(GENERATE_BUILDERS, "Whether to generate builders for models").defaultValue(Boolean.FALSE.toString())); - cliOptions.add(CliOption.newBoolean(OPTIONAL_GETTERS_FOR_NULLABLE_FIELDS_ONLY, "Make getters of nullable / non-required fields return Optional while keeping the field and setter as the raw type. Opt-in, disabled by default.", optionalGettersForNullableFieldsOnly)); + cliOptions.add(CliOption.newBoolean(OPTIONAL_GETTERS_FOR_NULLABLE_FIELDS_ONLY, "Make getters of non-required fields return Optional while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.", optionalGettersForNullableFieldsOnly)); cliOptions.add(CliOption.newBoolean(DISABLE_DISCRIMINATOR_JSON_IGNORE_PROPERTIES, "Ignore discriminator field type for Jackson serialization", disableDiscriminatorJsonIgnoreProperties)); cliOptions.add(CliOption.newString(CodegenConstants.PARENT_GROUP_ID, CodegenConstants.PARENT_GROUP_ID_DESC)); From 37ccc8934c475c3fef67067c0b135ca41b0b3d2b Mon Sep 17 00:00:00 2001 From: Jorge Date: Wed, 22 Jul 2026 12:16:50 +0200 Subject: [PATCH 09/15] feat: update optional getters description for non-required fields --- .../.openapi-generator/VERSION | 2 +- .../README.md | 2 +- .../org/openapitools/client/ApiClient.java | 20 ++++++++++++++----- .../client/JavaTimeFormatter.java | 2 +- .../client/RFC3339DateFormat.java | 2 +- .../client/ServerConfiguration.java | 2 +- .../openapitools/client/ServerVariable.java | 2 +- .../org/openapitools/client/StringUtil.java | 2 +- .../openapitools/client/api/DefaultApi.java | 2 +- .../openapitools/client/auth/ApiKeyAuth.java | 2 +- .../client/auth/Authentication.java | 2 +- .../client/auth/HttpBasicAuth.java | 2 +- .../client/auth/HttpBearerAuth.java | 2 +- .../org/openapitools/client/model/Foo.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../README.md | 2 +- .../org/openapitools/client/ApiClient.java | 18 +++++++++++++---- .../java/org/openapitools/client/BaseApi.java | 2 +- .../client/JavaTimeFormatter.java | 2 +- .../client/RFC3339DateFormat.java | 2 +- .../client/RFC3339InstantDeserializer.java | 2 +- .../client/RFC3339JavaTimeModule.java | 2 +- .../client/ServerConfiguration.java | 2 +- .../openapitools/client/ServerVariable.java | 2 +- .../openapitools/client/api/DefaultApi.java | 2 +- .../openapitools/client/auth/ApiKeyAuth.java | 2 +- .../client/auth/Authentication.java | 2 +- .../client/auth/HttpBasicAuth.java | 2 +- .../client/auth/HttpBearerAuth.java | 2 +- .../org/openapitools/client/model/Foo.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../README.md | 2 +- .../org/openapitools/client/ApiClient.java | 20 ++++++++++++++----- .../client/JavaTimeFormatter.java | 2 +- .../client/RFC3339DateFormat.java | 2 +- .../client/RFC3339InstantDeserializer.java | 2 +- .../client/RFC3339JavaTimeModule.java | 2 +- .../client/ServerConfiguration.java | 2 +- .../openapitools/client/ServerVariable.java | 2 +- .../org/openapitools/client/StringUtil.java | 2 +- .../openapitools/client/api/DefaultApi.java | 2 +- .../openapitools/client/auth/ApiKeyAuth.java | 2 +- .../client/auth/Authentication.java | 2 +- .../client/auth/HttpBasicAuth.java | 2 +- .../client/auth/HttpBearerAuth.java | 2 +- .../org/openapitools/client/model/Foo.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../java/org/openapitools/api/FileApi.java | 4 ++-- .../java/org/openapitools/api/FooApi.java | 4 ++-- .../java/org/openapitools/api/UploadApi.java | 4 ++-- .../main/java/org/openapitools/model/Foo.java | 2 +- 51 files changed, 95 insertions(+), 65 deletions(-) diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION index 186c33c96ed8..8fc8df61083a 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION @@ -1 +1 @@ -7.24.0-SNAPSHOT +7.25.0-SNAPSHOT diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/README.md b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/README.md index 2b8a384a8704..6d1d4a84364f 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/README.md +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/README.md @@ -4,7 +4,7 @@ jspecify - API version: 1.0.0 -- Generator version: 7.24.0-SNAPSHOT +- Generator version: 7.25.0-SNAPSHOT test fully qualified name and jspecify diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java index 740612bbc83b..25a21961bc13 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java @@ -53,7 +53,7 @@ import java.util.TimeZone; import java.util.function.Supplier; -import jakarta.annotation.Nullable; +import org.jspecify.annotations.Nullable; import java.time.OffsetDateTime; @@ -62,7 +62,7 @@ import org.openapitools.client.auth.HttpBearerAuth; import org.openapitools.client.auth.ApiKeyAuth; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class ApiClient extends JavaTimeFormatter { public enum CollectionFormat { CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null); @@ -582,10 +582,10 @@ public List selectHeaderAccept(String[] accepts) { /** * Select the Content-Type header's value from the given array: * if JSON exists in the given array, use it; - * otherwise use the first one of the array. + * otherwise use the first non-wildcard one of the array. * * @param contentTypes The Content-Type array to select from - * @return MediaType The Content-Type header to use. If the given array is empty, null will be returned. + * @return MediaType The Content-Type header to use. If the given array is empty, null will be returned; if it only contains wildcard media types, JSON will be used. */ public MediaType selectHeaderContentType(String[] contentTypes) { if (contentTypes.length == 0) { @@ -594,10 +594,20 @@ public MediaType selectHeaderContentType(String[] contentTypes) { for (String contentType : contentTypes) { MediaType mediaType = MediaType.parseMediaType(contentType); if (isJsonMime(mediaType)) { + // A wildcard media type (e.g. "*/*" or "application/*") is treated as + // JSON-compatible but cannot be used as a request Content-Type header, + // so fall back to concrete JSON in that case. + return mediaType.isWildcardType() || mediaType.isWildcardSubtype() ? MediaType.APPLICATION_JSON : mediaType; + } + } + // No JSON type found; use the first concrete (non-wildcard) media type instead. + for (String contentType : contentTypes) { + MediaType mediaType = MediaType.parseMediaType(contentType); + if (!mediaType.isWildcardType() && !mediaType.isWildcardSubtype()) { return mediaType; } } - return MediaType.parseMediaType(contentTypes[0]); + return MediaType.APPLICATION_JSON; } /** diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java index d25e3fc7c76d..96463ebdee2f 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java @@ -20,7 +20,7 @@ * Class that add parsing/formatting support for Java 8+ {@code OffsetDateTime} class. * It's generated for java clients when {@code AbstractJavaCodegen#dateLibrary} specified as {@code java8}. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class JavaTimeFormatter { private DateTimeFormatter offsetDateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java index 9c82900edf4e..07bbdd002992 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java @@ -21,7 +21,7 @@ import java.util.TimeZone; import tools.jackson.databind.util.StdDateFormat; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class RFC3339DateFormat extends DateFormat { private static final long serialVersionUID = 1L; private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC"); diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java index 017652e55155..05a6de2af25d 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java @@ -18,7 +18,7 @@ /** * Representing a Server configuration. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class ServerConfiguration { public String URL; public String description; diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java index 0740bf8aa46f..7f984316bde1 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java @@ -18,7 +18,7 @@ /** * Representing a Server Variable for server URL template substitution. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class ServerVariable { public String description; public String defaultValue; diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java index 0e31119b87fc..d1b2ebaf974c 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java @@ -16,7 +16,7 @@ import java.util.Collection; import java.util.Iterator; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java index 576961a5e635..5c44d1841571 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java @@ -27,7 +27,7 @@ import org.springframework.web.client.RestClient.ResponseSpec; import org.springframework.web.client.RestClientResponseException; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class DefaultApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java index e8889c30d615..b79ac2ca2224 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java @@ -16,7 +16,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java index 5625ecc76ed8..6c10a7b585ae 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java @@ -16,7 +16,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public interface Authentication { /** * Apply authentication settings to header and / or query parameters. diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java index 12c04ffa1e0d..42afe54f2ff5 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java @@ -19,7 +19,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class HttpBasicAuth implements Authentication { private String username; private String password; diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java index de15b5d3acfd..21be5e164fc5 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java @@ -18,7 +18,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class HttpBearerAuth implements Authentication { private final String scheme; private Supplier tokenSupplier; diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java index 8a71b71e535a..0ccb935e9c56 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java @@ -41,7 +41,7 @@ Foo.JSON_PROPERTY_REQUIRED_DT, Foo.JSON_PROPERTY_NUMBER }) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class Foo { public static final String JSON_PROPERTY_DT = "dt"; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION index 186c33c96ed8..8fc8df61083a 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION @@ -1 +1 @@ -7.24.0-SNAPSHOT +7.25.0-SNAPSHOT diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/README.md b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/README.md index 3391b5009c7b..7facb2330822 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/README.md +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/README.md @@ -4,7 +4,7 @@ jspecify - API version: 1.0.0 -- Generator version: 7.24.0-SNAPSHOT +- Generator version: 7.25.0-SNAPSHOT test fully qualified name and jspecify diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java index 21fc9847741d..7ec7c10a9ab6 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java @@ -70,7 +70,7 @@ import org.openapitools.client.auth.Authentication; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class ApiClient extends JavaTimeFormatter { public enum CollectionFormat { CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null); @@ -497,10 +497,10 @@ public List selectHeaderAccept(String[] accepts) { /** * Select the Content-Type header's value from the given array: * if JSON exists in the given array, use it; - * otherwise use the first one of the array. + * otherwise use the first non-wildcard one of the array. * * @param contentTypes The Content-Type array to select from - * @return MediaType The Content-Type header to use. If the given array is empty, JSON will be used. + * @return MediaType The Content-Type header to use. If the given array is empty, or only contains wildcard media types, JSON will be used. */ public MediaType selectHeaderContentType(String[] contentTypes) { if (contentTypes.length == 0) { @@ -509,10 +509,20 @@ public MediaType selectHeaderContentType(String[] contentTypes) { for (String contentType : contentTypes) { MediaType mediaType = MediaType.parseMediaType(contentType); if (isJsonMime(mediaType)) { + // A wildcard media type (e.g. "*/*" or "application/*") is treated as + // JSON-compatible but cannot be used as a request Content-Type header, + // so fall back to concrete JSON in that case. + return mediaType.isWildcardType() || mediaType.isWildcardSubtype() ? MediaType.APPLICATION_JSON : mediaType; + } + } + // No JSON type found; use the first concrete (non-wildcard) media type instead. + for (String contentType : contentTypes) { + MediaType mediaType = MediaType.parseMediaType(contentType); + if (!mediaType.isWildcardType() && !mediaType.isWildcardSubtype()) { return mediaType; } } - return MediaType.parseMediaType(contentTypes[0]); + return MediaType.APPLICATION_JSON; } /** diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/BaseApi.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/BaseApi.java index c7559b814672..2c83dcf27a12 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/BaseApi.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/BaseApi.java @@ -18,7 +18,7 @@ import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public abstract class BaseApi { protected ApiClient apiClient; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java index d25e3fc7c76d..96463ebdee2f 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java @@ -20,7 +20,7 @@ * Class that add parsing/formatting support for Java 8+ {@code OffsetDateTime} class. * It's generated for java clients when {@code AbstractJavaCodegen#dateLibrary} specified as {@code java8}. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class JavaTimeFormatter { private DateTimeFormatter offsetDateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java index 9c82900edf4e..07bbdd002992 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java @@ -21,7 +21,7 @@ import java.util.TimeZone; import tools.jackson.databind.util.StdDateFormat; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class RFC3339DateFormat extends DateFormat { private static final long serialVersionUID = 1L; private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC"); diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java index 9756de75911c..03022c373c6f 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java @@ -28,7 +28,7 @@ import tools.jackson.databind.cfg.DateTimeFeature; import tools.jackson.databind.ext.javatime.deser.InstantDeserializer; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class RFC3339InstantDeserializer extends InstantDeserializer { private static final long serialVersionUID = 1L; private final static boolean DEFAULT_NORMALIZE_ZONE_ID = DateTimeFeature.NORMALIZE_DESERIALIZED_ZONE_ID.enabledByDefault(); diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java index 0a0c7f7c929c..aa0c37aa7012 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java @@ -18,7 +18,7 @@ import tools.jackson.databind.module.SimpleModule; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class RFC3339JavaTimeModule extends SimpleModule { private static final long serialVersionUID = 1L; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java index 017652e55155..05a6de2af25d 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java @@ -18,7 +18,7 @@ /** * Representing a Server configuration. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class ServerConfiguration { public String URL; public String description; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java index 0740bf8aa46f..7f984316bde1 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java @@ -18,7 +18,7 @@ /** * Representing a Server Variable for server URL template substitution. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class ServerVariable { public String description; public String defaultValue; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java index 2bb43afa0473..73dabfd35f1c 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java @@ -29,7 +29,7 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class DefaultApi extends BaseApi { public DefaultApi() { diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java index e8889c30d615..b79ac2ca2224 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java @@ -16,7 +16,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java index 5625ecc76ed8..6c10a7b585ae 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java @@ -16,7 +16,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public interface Authentication { /** * Apply authentication settings to header and / or query parameters. diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java index 12c04ffa1e0d..42afe54f2ff5 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java @@ -19,7 +19,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class HttpBasicAuth implements Authentication { private String username; private String password; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java index de15b5d3acfd..21be5e164fc5 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java @@ -18,7 +18,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class HttpBearerAuth implements Authentication { private final String scheme; private Supplier tokenSupplier; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java index 8a71b71e535a..0ccb935e9c56 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java @@ -41,7 +41,7 @@ Foo.JSON_PROPERTY_REQUIRED_DT, Foo.JSON_PROPERTY_NUMBER }) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class Foo { public static final String JSON_PROPERTY_DT = "dt"; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION index 186c33c96ed8..8fc8df61083a 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION @@ -1 +1 @@ -7.24.0-SNAPSHOT +7.25.0-SNAPSHOT diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/README.md b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/README.md index b18b377a9f1f..ef6c39510b2d 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/README.md +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/README.md @@ -4,7 +4,7 @@ jspecify - API version: 1.0.0 -- Generator version: 7.24.0-SNAPSHOT +- Generator version: 7.25.0-SNAPSHOT test fully qualified name and jspecify diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java index fb2802c40577..3f853999cc02 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java @@ -70,7 +70,7 @@ import java.util.Map.Entry; import java.util.TimeZone; -import jakarta.annotation.Nullable; +import org.jspecify.annotations.Nullable; import java.time.OffsetDateTime; @@ -79,7 +79,7 @@ import org.openapitools.client.auth.HttpBearerAuth; import org.openapitools.client.auth.ApiKeyAuth; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class ApiClient extends JavaTimeFormatter { public enum CollectionFormat { CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null); @@ -556,10 +556,10 @@ public List selectHeaderAccept(String[] accepts) { /** * Select the Content-Type header's value from the given array: * if JSON exists in the given array, use it; - * otherwise use the first one of the array. + * otherwise use the first non-wildcard one of the array. * * @param contentTypes The Content-Type array to select from - * @return MediaType The Content-Type header to use. If the given array is empty, null will be returned. + * @return MediaType The Content-Type header to use. If the given array is empty, null will be returned; if it only contains wildcard media types, JSON will be used. */ public MediaType selectHeaderContentType(String[] contentTypes) { if (contentTypes.length == 0) { @@ -568,10 +568,20 @@ public MediaType selectHeaderContentType(String[] contentTypes) { for (String contentType : contentTypes) { MediaType mediaType = MediaType.parseMediaType(contentType); if (isJsonMime(mediaType)) { + // A wildcard media type (e.g. "*/*" or "application/*") is treated as + // JSON-compatible but cannot be used as a request Content-Type header, + // so fall back to concrete JSON in that case. + return mediaType.isWildcardType() || mediaType.isWildcardSubtype() ? MediaType.APPLICATION_JSON : mediaType; + } + } + // No JSON type found; use the first concrete (non-wildcard) media type instead. + for (String contentType : contentTypes) { + MediaType mediaType = MediaType.parseMediaType(contentType); + if (!mediaType.isWildcardType() && !mediaType.isWildcardSubtype()) { return mediaType; } } - return MediaType.parseMediaType(contentTypes[0]); + return MediaType.APPLICATION_JSON; } /** diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java index d25e3fc7c76d..96463ebdee2f 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java @@ -20,7 +20,7 @@ * Class that add parsing/formatting support for Java 8+ {@code OffsetDateTime} class. * It's generated for java clients when {@code AbstractJavaCodegen#dateLibrary} specified as {@code java8}. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class JavaTimeFormatter { private DateTimeFormatter offsetDateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java index 9c82900edf4e..07bbdd002992 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java @@ -21,7 +21,7 @@ import java.util.TimeZone; import tools.jackson.databind.util.StdDateFormat; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class RFC3339DateFormat extends DateFormat { private static final long serialVersionUID = 1L; private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC"); diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java index 9756de75911c..03022c373c6f 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java @@ -28,7 +28,7 @@ import tools.jackson.databind.cfg.DateTimeFeature; import tools.jackson.databind.ext.javatime.deser.InstantDeserializer; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class RFC3339InstantDeserializer extends InstantDeserializer { private static final long serialVersionUID = 1L; private final static boolean DEFAULT_NORMALIZE_ZONE_ID = DateTimeFeature.NORMALIZE_DESERIALIZED_ZONE_ID.enabledByDefault(); diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java index 0a0c7f7c929c..aa0c37aa7012 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java @@ -18,7 +18,7 @@ import tools.jackson.databind.module.SimpleModule; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class RFC3339JavaTimeModule extends SimpleModule { private static final long serialVersionUID = 1L; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java index 017652e55155..05a6de2af25d 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java @@ -18,7 +18,7 @@ /** * Representing a Server configuration. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class ServerConfiguration { public String URL; public String description; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java index 0740bf8aa46f..7f984316bde1 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java @@ -18,7 +18,7 @@ /** * Representing a Server Variable for server URL template substitution. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class ServerVariable { public String description; public String defaultValue; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java index 0e31119b87fc..d1b2ebaf974c 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java @@ -16,7 +16,7 @@ import java.util.Collection; import java.util.Iterator; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java index 440f85f9d8f5..c543aec8924a 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/DefaultApi.java @@ -29,7 +29,7 @@ import reactor.core.publisher.Mono; import reactor.core.publisher.Flux; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class DefaultApi { private ApiClient apiClient; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java index e8889c30d615..b79ac2ca2224 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java @@ -16,7 +16,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java index 5625ecc76ed8..6c10a7b585ae 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java @@ -16,7 +16,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public interface Authentication { /** * Apply authentication settings to header and / or query parameters. diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java index 12c04ffa1e0d..42afe54f2ff5 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java @@ -19,7 +19,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class HttpBasicAuth implements Authentication { private String username; private String password; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java index 00825bc34a79..d738894e92a0 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java @@ -16,7 +16,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class HttpBearerAuth implements Authentication { private final String scheme; private String bearerToken; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java index b4d8fcfb741c..8533d5e37f80 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java @@ -40,7 +40,7 @@ Foo.JSON_PROPERTY_REQUIRED_DT, Foo.JSON_PROPERTY_NUMBER }) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class Foo { public static final String JSON_PROPERTY_DT = "dt"; diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/VERSION b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/VERSION index 186c33c96ed8..8fc8df61083a 100644 --- a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/VERSION +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/VERSION @@ -1 +1 @@ -7.24.0-SNAPSHOT +7.25.0-SNAPSHOT diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FileApi.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FileApi.java index 9f5b9cc53317..0c4ff45ac8b3 100644 --- a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FileApi.java +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FileApi.java @@ -1,5 +1,5 @@ /* - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.24.0-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.25.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ @@ -32,7 +32,7 @@ import java.util.Optional; import jakarta.annotation.Generated; -@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") @Validated @Tag(name = "file", description = "the file API") public interface FileApi { diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FooApi.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FooApi.java index cdbcd3080e7f..8e068a12f2e3 100644 --- a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FooApi.java +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FooApi.java @@ -1,5 +1,5 @@ /* - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.24.0-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.25.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ @@ -36,7 +36,7 @@ import java.util.Optional; import jakarta.annotation.Generated; -@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") @Validated @Tag(name = "foo", description = "the foo API") public interface FooApi { diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadApi.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadApi.java index f3028378f132..5d679bf128a3 100644 --- a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadApi.java +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadApi.java @@ -1,5 +1,5 @@ /* - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.24.0-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.25.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ @@ -33,7 +33,7 @@ import java.util.Optional; import jakarta.annotation.Generated; -@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") @Validated @Tag(name = "upload", description = "the upload API") public interface UploadApi { diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/Foo.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/Foo.java index cf38623d11e9..9a9252719380 100644 --- a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/Foo.java +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/Foo.java @@ -34,7 +34,7 @@ @JacksonXmlRootElement(localName = "Foo") @XmlRootElement(name = "Foo") @XmlAccessorType(XmlAccessType.FIELD) -@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.24.0-SNAPSHOT") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") public class Foo { @JsonInclude(JsonInclude.Include.NON_NULL) From 6d82076793d5d6b560661585b8e0cf53347eff18 Mon Sep 17 00:00:00 2001 From: Jorge Date: Tue, 1 Sep 2026 11:42:42 +0200 Subject: [PATCH 10/15] refactor: update descriptions and remove deprecated options in configuration files --- docs/generators/cpp-boost-beast-client.md | 52 +++++++++-------------- docs/generators/go-gin-server.md | 2 +- docs/generators/go.md | 1 - docs/generators/java-camel.md | 16 ++----- docs/generators/java-vertx-web.md | 1 - docs/generators/jaxrs-cxf-cdi.md | 1 - docs/generators/jaxrs-spec.md | 1 - docs/generators/kotlin-spring.md | 13 ++---- docs/generators/kotlin.md | 5 +-- docs/generators/php-dt.md | 5 --- docs/generators/php-flight.md | 5 --- docs/generators/php-laravel.md | 5 --- docs/generators/php-lumen.md | 5 --- docs/generators/php-mezzio-ph.md | 5 --- docs/generators/php-nextgen.md | 5 --- docs/generators/php-slim4.md | 5 --- docs/generators/php.md | 5 --- docs/generators/python-pydantic-v1.md | 2 +- docs/generators/python.md | 23 +--------- docs/generators/scala-sttp4-jsoniter.md | 2 +- docs/generators/spring.md | 16 ++----- docs/generators/typescript-angular.md | 4 +- docs/generators/typescript-axios.md | 2 +- docs/generators/typescript-fetch.md | 1 - 24 files changed, 39 insertions(+), 143 deletions(-) diff --git a/docs/generators/cpp-boost-beast-client.md b/docs/generators/cpp-boost-beast-client.md index 657d1c9131b3..32e0abea44f8 100644 --- a/docs/generators/cpp-boost-beast-client.md +++ b/docs/generators/cpp-boost-beast-client.md @@ -19,18 +19,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl | Option | Description | Values | Default | | ------ | ----------- | ------ | ------- | |apiPackage|C++ namespace for apis (convention: name.space.api).| |org.openapitools.client.api| -|compileWithValidation|Emit schema-validation IR and kValidateOnDecode=true in generated ValidationTypes.h (default). Set to false to omit the IR for high-throughput clients. Representation diagnostics (non-finite destinations, integer range, required properties) remain active.| |true| -|exportMacro|C++ export macro placed before public classes and functions. When non-empty, ApiExport.h is generated for Windows DLL export/import handling.| || -|formatAssertionPolicy|Format handling in composition branch matching. Only 'annotation' is supported: format metadata never affects match counts.|

**annotation**
Formats are annotations and do not affect validation
|annotation| -|inferConditionalSseOperations|Infer conditional SSE for dual JSON/SSE operations only when the request selector and event model are unambiguous. Enabled by default.| |true| |modelPackage|C++ namespace for models (convention: name.space.model).| |org.openapitools.client.model| |packageName|C++ package and library name.| |CppBoostBeastOpenAPIClient| -|preserveAdditionalProperties|Retain undeclared JSON object members in generated object models and re-emit them. Composition validation accepts such members while decoding; set to false for strict additionalProperties handling.| |false| -|sseEventTypeMappings|Comma-separated operationId=Model mappings for the JSON schema of each SSE event data payload.| |null| -|sseOperationIds|Comma-separated operationIds whose JSON request body conditionally selects text/event-stream (default request property: stream).| |null| -|sseRequestPropertyMappings|Comma-separated operationId=property mappings for the boolean request property that selects SSE.| |null| -|sseSchemaMode|SSE schema interpretation mode for text/event-stream responses. 'representation' (default): the response schema describes the media representation; callbacks receive an owning SseEvent with raw data, event, id, and retry metadata. 'jsonEventData': decode each complete event data payload against the response schema and pass both the typed value and SseEvent metadata to the callback. Use x-sse-event-data-schema for per-operation typed decoding.|
**representation**
Schema describes the media representation; callback receives SseEvent
**jsonEventData**
Schema describes each JSON event data payload
|representation| -|tolerateNonNullableNulls|Treat explicit JSON null values as absent for generated model properties whose schemas do not allow null. Enabled by default to tolerate non-conforming server responses while preserving required-key presence checks; set to false for strict schema decoding. Non-null values remain fully validated.| |true| ## IMPORT MAPPING @@ -42,12 +32,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl |int32_t|#include <cstdint>| |int64_t|#include <cstdint>| |std::map|#include <map>| -|std::monostate|#include <variant>| |std::nullptr_t|#include <cstddef>| -|std::optional|#include <optional>| -|std::shared_ptr|#include <memory>| |std::string|#include <string>| -|std::variant|#include <variant>| |std::vector|#include <vector>| @@ -65,9 +51,9 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • double
  • float
  • int
  • +
  • int32_t
  • +
  • int64_t
  • long
  • -
  • std::int32_t
  • -
  • std::int64_t
  • ## RESERVED WORDS @@ -182,14 +168,14 @@ These options may be applied as additional-properties (cli) or configOptions (pl |Int64|✓|OAS2,OAS3 |Float|✓|OAS2,OAS3 |Double|✓|OAS2,OAS3 -|Decimal|✗|ToolingExtension +|Decimal|✓|ToolingExtension |String|✓|OAS2,OAS3 -|Byte|✗|OAS2,OAS3 -|Binary|✗|OAS2,OAS3 +|Byte|✓|OAS2,OAS3 +|Binary|✓|OAS2,OAS3 |Boolean|✓|OAS2,OAS3 -|Date|✗|OAS2,OAS3 -|DateTime|✗|OAS2,OAS3 -|Password|✗|OAS2,OAS3 +|Date|✓|OAS2,OAS3 +|DateTime|✓|OAS2,OAS3 +|Password|✓|OAS2,OAS3 |File|✓|OAS2 |Uuid|✗| |Array|✓|OAS2,OAS3 @@ -231,11 +217,11 @@ These options may be applied as additional-properties (cli) or configOptions (pl |ExternalDocumentation|✓|OAS2,OAS3 |Examples|✓|OAS2,OAS3 |XMLStructureDefinitions|✗|OAS2,OAS3 -|MultiServer|✓|OAS3 +|MultiServer|✗|OAS3 |ParameterizedServer|✗|OAS3 -|ParameterStyling|✓|OAS3 -|Callbacks|✓|OAS3 -|LinkObjects|✓|OAS3 +|ParameterStyling|✗|OAS3 +|Callbacks|✗|OAS3 +|LinkObjects|✗|OAS3 ### Parameter Feature | Name | Supported | Defined By | @@ -246,19 +232,19 @@ These options may be applied as additional-properties (cli) or configOptions (pl |Body|✓|OAS2 |FormUnencoded|✓|OAS2 |FormMultipart|✓|OAS2 -|Cookie|✓|OAS3 +|Cookie|✗|OAS3 ### Schema Support Feature | Name | Supported | Defined By | | ---- | --------- | ---------- | |Simple|✓|OAS2,OAS3 |Composite|✓|OAS2,OAS3 -|Polymorphism|✓|OAS2,OAS3 -|Union|✓|OAS3 -|allOf|✓|OAS2,OAS3 -|anyOf|✓|OAS3 -|oneOf|✓|OAS3 -|not|✓|OAS3 +|Polymorphism|✗|OAS2,OAS3 +|Union|✗|OAS3 +|allOf|✗|OAS2,OAS3 +|anyOf|✗|OAS3 +|oneOf|✗|OAS3 +|not|✗|OAS3 ### Security Feature | Name | Supported | Defined By | diff --git a/docs/generators/go-gin-server.md b/docs/generators/go-gin-server.md index 406aaf0acd81..60e8653c13c0 100644 --- a/docs/generators/go-gin-server.md +++ b/docs/generators/go-gin-server.md @@ -21,7 +21,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |apiPath|Name of the folder that contains the Go source code| |go| |enumClassPrefix|Prefix enum with class name| |false| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true| -|interfaceOnly|Whether to generate only API interface stubs instead of the API implementation files.| |false| +|interfaceOnly|Whether to generate only API interface stubs without the implementation files.| |false| |packageName|Go package name (convention: lowercase).| |openapi| |packageVersion|Go package version.| |1.0.0| |serverPort|The network port the generated server binds to| |8080| diff --git a/docs/generators/go.md b/docs/generators/go.md index d241f6471899..5ad8f47d10d4 100644 --- a/docs/generators/go.md +++ b/docs/generators/go.md @@ -31,7 +31,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |structPrefix|whether to prefix struct with the class name. e.g. DeletePetOpts => PetApiDeletePetOpts| |false| |useDefaultValuesForRequiredVars|Use default values for required variables when available| |false| -|useHttpHeaderSet|When setting HTTP request headers, use http.Header.Set with canonicalized header names| |false| |useOneOfDiscriminatorLookup|Use the discriminator's mapping in oneOf to speed up the model lookup. IMPORTANT: Validation (e.g. one and only one match in oneOf's schemas) will be skipped.| |false| |withAWSV4Signature|whether to include AWS v4 signature support| |false| |withGoMod|Generate go.mod and go.sum| |true| diff --git a/docs/generators/java-camel.md b/docs/generators/java-camel.md index b01a4d3853dd..ef1e380e7d99 100644 --- a/docs/generators/java-camel.md +++ b/docs/generators/java-camel.md @@ -31,7 +31,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |artifactUrl|artifact URL in generated pom.xml| |https://github.com/openapitools/openapi-generator| |artifactVersion|artifact version in generated pom.xml. This also becomes part of the generated library's filename. If not provided, uses the version from the OpenAPI specification file. If that's also not present, uses the default value of the artifactVersion option.| |1.0.0| |async|use async Callable controllers| |false| -|autoXSpringPaginated|Automatically add x-spring-paginated to operations that have 'page', 'size', and 'sort' query parameters. When enabled, operations with all three parameters will have Pageable support automatically applied. Operations with x-spring-paginated explicitly set to false will not be auto-detected. Only applies when library is spring-boot or spring-cloud.| |false| +|autoXSpringPaginated|Automatically add x-spring-paginated to operations that have 'page', 'size', and 'sort' query parameters. When enabled, operations with all three parameters will have Pageable support automatically applied. Operations with x-spring-paginated explicitly set to false will not be auto-detected. Only applies when library=spring-boot.| |false| |basePackage|base package (invokerPackage) for generated code| |org.openapitools| |bigDecimalAsString|Treat BigDecimal values as Strings to avoid precision loss.| |false| |booleanGetterPrefix|Set booleanGetterPrefix| |get| @@ -64,10 +64,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl |generateBuilders|Whether to generate builders for models| |false| |generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false| |generateGenericResponseEntity|Use a generic type for the `ResponseEntity` wrapping return values of generated API methods. If enabled, method are generated with return type ResponseEntity<?>| |false| -|generateJsonIncludeAnnotations|Whether to generate policy @JsonInclude annotations on model properties. When true, emits spec-honest annotations (required-field protection and the optional non-nullable policy from optionalNonNullPropertyJsonInclude). When false, none are generated and the global ObjectMapper owns inclusion. When left unset it defaults to false (7.23.0-equivalent output) and logs a warning; set it explicitly to silence the warning. A per-property override set via the `x-jackson-json-include-policy` vendor extension is always honored regardless of this flag.| |false| -|generateJsonSetterNullsAnnotations|Whether to generate @JsonSetter(nulls = ...) annotations on optional non-nullable model properties. When true, emits @JsonSetter so an explicit null in the payload does not overwrite the field. When false, none are generated and deserialization null-handling defers to the global ObjectMapper. When left unset it defaults to false (7.23.0-equivalent output) and logs a warning; set it explicitly to silence the warning.| |false| -|generatePageableConstraintValidation|Generate a @ValidPageable annotation and PageableConstraintValidator class, and apply @ValidPageable to the injected Pageable parameter of operations whose 'page' or 'size' parameter specifies a maximum constraint. The annotation enforces those constraints on the Pageable object that replaces the individual page/size query parameters. Requires useBeanValidation=true and library is spring-boot or spring-cloud.| |false| -|generateSortValidation|Generate a @ValidSort annotation and SortValidator class, and apply @ValidSort to the injected Pageable parameter of operations whose 'sort' parameter has enum values. The annotation validates that sort values in the Pageable object match the allowed enum values from the spec. Requires useBeanValidation=true and library is spring-boot or spring-cloud.| |false| +|generatePageableConstraintValidation|Generate a @ValidPageable annotation and PageableConstraintValidator class, and apply @ValidPageable to the injected Pageable parameter of operations whose 'page' or 'size' parameter specifies a maximum constraint. The annotation enforces those constraints on the Pageable object that replaces the individual page/size query parameters. Requires useBeanValidation=true and library=spring-boot.| |false| +|generateSortValidation|Generate a @ValidSort annotation and SortValidator class, and apply @ValidSort to the injected Pageable parameter of operations whose 'sort' parameter has enum values. The annotation validates that sort values in the Pageable object match the allowed enum values from the spec. Requires useBeanValidation=true and library=spring-boot.| |false| |generatedConstructorWithRequiredArgs|Whether to generate constructors with required args for models| |true| |groupId|groupId in generated pom.xml| |org.openapitools| |hateoas|Use Spring HATEOAS library to allow adding HATEOAS links| |false| @@ -85,8 +83,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |optionalAcceptNullable|Use `ofNullable` instead of just `of` to accept null values when using Optional.| |true| -|optionalNonNullPropertyJsonInclude|The Jackson @JsonInclude policy emitted for optional, non-nullable model properties when generateJsonIncludeAnnotations is true. NONE emits no annotation, deferring fully to the global ObjectMapper inclusion policy.|
    **NON_NULL**
    Omit the property when its value is null (default, spec-safe for non-nullable fields).
    **NON_EMPTY**
    Omit the property when its value is null or considered empty.
    **NON_DEFAULT**
    Omit the property when its value equals the default.
    **NONE**
    Emit no @JsonInclude annotation; defer to the global ObjectMapper.
    |NON_NULL| -|optionalNonNullPropertyJsonSetterNulls|The Jackson @JsonSetter(nulls = ...) mode emitted for optional, non-nullable model properties when generateJsonSetterNullsAnnotations is true. SKIP ignores an explicit JSON null (keeping the field's default), FAIL rejects it. When left unset the mode is derived from openApiNullable (true -> FAIL where supported, false -> SKIP), preserving 7.24.x behavior. A per-property override set via the `x-jackson-json-setter-nulls` vendor extension always wins.|
    **SKIP**
    Emit @JsonSetter(nulls = Nulls.SKIP): silently ignore an explicit JSON null, keeping the field's default.
    **FAIL**
    Emit @JsonSetter(nulls = Nulls.FAIL): reject an explicit JSON null.
    |null| |optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| @@ -110,7 +106,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |sourceFolder|source folder for generated code| |src/main/java| |springApiVersion|Value for 'version' attribute in @RequestMapping (for Spring 7 and above).| |null| -|springSecurityAuthorityPrefix|Prefix added to OAuth2/OpenID Connect scopes when generating Spring Security authorities.| |SCOPE_| |substituteGenericPagedModel|Detect schemas that represent paginated responses (an object with a 'content' array property and a 'page' pagination-metadata property) and replace their generated references with PagedModel<T>. By default this uses a generated type in the config package (default 'org.openapitools.configuration'), but `importMappings.PagedModel` can override it to a custom/FQCN-mapped type. The detected page schemas and the pagination metadata schema are suppressed from code generation.| |false| |testOutput|Set output folder for models and APIs tests| |${project.build.directory}/generated-test-sources/openapi| |title|server title name or client service name| |OpenAPI Spring| @@ -133,7 +128,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |useSpringBoot4|Generate code and provide dependencies for use with Spring Boot 4.x. (Use jakarta instead of javax in imports). Enabling this option will also enable `useJakartaEe`.| |false| |useSpringBuiltInValidation|Disable `@Validated` at the class level when using built-in validation.| |false| |useSpringController|Annotate the generated API as a Spring Controller| |false| -|useSpringSecurityPreAuthorize|Generate Spring Security @PreAuthorize annotations from OAuth2/OpenID Connect security scopes.| |false| |useSwaggerUI|Open the OpenApi specification in swagger-ui. Will also import and configure needed dependencies| |true| |useTags|use tags for creating interface and controller classnames| |false| |virtualService|Generates the virtual service. For more details refer - https://github.com/virtualansoftware/virtualan/wiki| |false| @@ -153,15 +147,13 @@ These options may be applied as additional-properties (cli) or configOptions (pl |x-class-extra-annotation|Custom annotation(s) to be added to model; accepts a string or list of strings|MODEL|null |x-field-extra-annotation|Custom annotation(s) to be added to property; accepts a string or list of strings|FIELD, OPERATION_PARAMETER|null |x-operation-extra-annotation|Custom annotation(s) to be added to operation; accepts a string or list of strings|OPERATION|null -|x-spring-paginated|Add `org.springframework.data.domain.Pageable` to controller method. Can be used to handle `page`, `size` and `sort` query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the `Pageable` object. Applies when `library=spring-boot` or `library=spring-cloud`; ignored for other (client) libraries.|OPERATION|false +|x-spring-paginated|Add `org.springframework.data.domain.Pageable` to controller method. Can be used to handle `page`, `size` and `sort` query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the `Pageable` object. Only applies when `library=spring-boot`; ignored for client libraries (spring-cloud, spring-declarative-http-interface).|OPERATION|false |x-version-param|Marker property that tells that this parameter would be used for endpoint versioning. Applicable for headers & query params. true/false|OPERATION_PARAMETER|null |x-pattern-message|Add this property whenever you need to customize the invalidation error message for the regex pattern of a variable|FIELD, OPERATION_PARAMETER|null |x-size-message|Add this property whenever you need to customize the invalidation error message for the size or length of a variable|FIELD, OPERATION_PARAMETER|null |x-minimum-message|Add this property whenever you need to customize the invalidation error message for the minimum value of a variable|FIELD, OPERATION_PARAMETER|null |x-maximum-message|Add this property whenever you need to customize the invalidation error message for the maximum value of a variable|FIELD, OPERATION_PARAMETER|null |x-spring-api-version|Value for 'version' attribute in @RequestMapping (for Spring 7 and above).|OPERATION|null -|x-jackson-json-include-policy|Manually override the resolved Jackson `@JsonInclude` policy for this property. Must be one of `ALWAYS`, `NON_NULL`, `NON_ABSENT`, `NON_EMPTY`, `NON_DEFAULT`, `USE_DEFAULTS`, `CUSTOM`, or `NONE` to emit no annotation. Always wins over the automatic required/nullable matrix and the `optionalNonNullPropertyJsonInclude` option.|FIELD|resolved automatically per the required/nullable matrix -|x-jackson-json-setter-nulls|Manually override the resolved Jackson `@JsonSetter(nulls = ...)` deserialization null-handling for this property. Must be one of `SKIP` (ignore an explicit JSON null, keeping the default), `FAIL` (reject an explicit JSON null), or `NONE` to emit no annotation. Always wins over the automatic `openApiNullable` default and the `optionalNonNullPropertyJsonSetterNulls` option, and is honored regardless of `generateJsonSetterNullsAnnotations` or whether the property is required/nullable.|FIELD|resolved automatically per the openApiNullable default ## IMPORT MAPPING diff --git a/docs/generators/java-vertx-web.md b/docs/generators/java-vertx-web.md index 9a40109e3710..cddf51ab5c58 100644 --- a/docs/generators/java-vertx-web.md +++ b/docs/generators/java-vertx-web.md @@ -51,7 +51,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |ignoreAnyOfInEnum|Ignore anyOf keyword in enum| |false| |implicitHeaders|Skip header parameters in the generated API methods using @ApiImplicitParams annotation.| |false| |implicitHeadersRegex|Skip header parameters that matches given regex in the generated API methods using @ApiImplicitParams annotation. Note: this parameter is ignored when implicitHeaders=true| |null| -|interfaceOnly|Whether to generate only API interface stubs without the server files.| |false| |invokerPackage|root package for generated code| |org.openapitools.vertxweb.server| |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| |licenseName|The name of the license| |Unlicense| diff --git a/docs/generators/jaxrs-cxf-cdi.md b/docs/generators/jaxrs-cxf-cdi.md index 8c6fe4a82299..2ea90c843846 100644 --- a/docs/generators/jaxrs-cxf-cdi.md +++ b/docs/generators/jaxrs-cxf-cdi.md @@ -47,7 +47,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |generateBuilders|Whether to generate builders for models| |false| |generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false| |generatePom|Whether to generate pom.xml if the file does not already exist.| |true| -|generateRootResources|Whether to generate the root resource and application classes, only useful if interfaceOnly is true.| |true| |groupId|groupId in generated pom.xml| |org.openapitools| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |false| |ignoreAnyOfInEnum|Ignore anyOf keyword in enum| |false| diff --git a/docs/generators/jaxrs-spec.md b/docs/generators/jaxrs-spec.md index d997aa83a51c..7bc691ec5bba 100644 --- a/docs/generators/jaxrs-spec.md +++ b/docs/generators/jaxrs-spec.md @@ -48,7 +48,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false| |generateJsonCreator|Whether to generate @JsonCreator constructor for required properties.| |true| |generatePom|Whether to generate pom.xml if the file does not already exist.| |true| -|generateRootResources|Whether to generate the root resource and application classes, only useful if interfaceOnly is true.| |true| |groupId|groupId in generated pom.xml| |org.openapitools| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |false| |ignoreAnyOfInEnum|Ignore anyOf keyword in enum| |false| diff --git a/docs/generators/kotlin-spring.md b/docs/generators/kotlin-spring.md index e4a0074ee562..f42388d53000 100644 --- a/docs/generators/kotlin-spring.md +++ b/docs/generators/kotlin-spring.md @@ -33,10 +33,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl |documentationProvider|Select the OpenAPI documentation provider.|
    **none**
    Do not publish an OpenAPI specification.
    **source**
    Publish the original input OpenAPI specification.
    **springdoc**
    Generate an OpenAPI 3 specification using SpringDoc.
    |springdoc| |enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', 'original', and 'bestEffortBacktick' (like 'original' but tries to wrap values in backticks before falling back to sanitizing, e.g. `name,asc` stays `name,asc` rather than becoming nameCommaAsc; useful for sort/order enums)| |original| |exceptionHandler|generate default global exception handlers (not compatible with reactive. enabling reactive will disable exceptionHandler )| |true| -|generateJsonIncludeAnnotations|Whether to generate policy @JsonInclude annotations on model properties. When true, emits spec-honest annotations (required-field protection and the optional non-nullable policy from optionalNonNullPropertyJsonInclude). When false, none are generated and the global ObjectMapper owns inclusion. When left unset it defaults to false (7.23.0-equivalent output) and logs a warning; set it explicitly to silence the warning. A per-property override set via the `x-jackson-json-include-policy` vendor extension is always honored regardless of this flag.| |false| -|generateJsonSetterNullsAnnotations|Whether to generate @JsonSetter(nulls = ...) annotations on optional non-nullable model properties. When true, emits @JsonSetter (Nulls.FAIL when openApiNullable is true, otherwise Nulls.SKIP) so an explicit null in the payload is handled explicitly. When false, none are generated and deserialization null-handling defers to the global ObjectMapper. When left unset it defaults to false (7.23.0-equivalent output) and logs a warning; set it explicitly to silence the warning.| |false| -|generatePageableConstraintValidation|Generate a @ValidPageable annotation and PageableConstraintValidator class, and apply @ValidPageable to the injected Pageable parameter of operations whose 'page' or 'size' parameter specifies a maximum constraint. The annotation enforces those constraints on the Pageable object that replaces the individual page/size query parameters. Requires useBeanValidation=true and library is spring-boot or spring-cloud.| |false| -|generateSortValidation|Generate a @ValidSort annotation and SortValidator class, and apply @ValidSort to the injected Pageable parameter of operations whose 'sort' parameter has enum values. The annotation validates that sort values in the Pageable object match the allowed enum values from the spec. Requires useBeanValidation=true and library is spring-boot or spring-cloud.| |false| +|generatePageableConstraintValidation|Generate a @ValidPageable annotation and PageableConstraintValidator class, and apply @ValidPageable to the injected Pageable parameter of operations whose 'page' or 'size' parameter specifies a maximum constraint. The annotation enforces those constraints on the Pageable object that replaces the individual page/size query parameters. Requires useBeanValidation=true and library=spring-boot.| |false| +|generateSortValidation|Generate a @ValidSort annotation and SortValidator class, and apply @ValidSort to the injected Pageable parameter of operations whose 'sort' parameter has enum values. The annotation validates that sort values in the Pageable object match the allowed enum values from the spec. Requires useBeanValidation=true and library=spring-boot.| |false| |gradleBuildFile|generate a gradle build file using the Kotlin DSL| |true| |groupId|Generated artifact package's organization (i.e. maven groupId).| |org.openapitools| |implicitHeaders|Skip header parameters in the generated API methods.| |false| @@ -46,8 +44,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelMutable|Create mutable models| |false| |modelPackage|model package for generated code| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library (jackson-databind-nullable) for strict null handling. Controls how optional + non-nullable properties (required: false, nullable: false) handle explicit JSON null: when false (default), @JsonSetter(nulls = Nulls.SKIP) is used — explicit null is silently ignored (lenient, protects any default value from being overridden); when true, @JsonSetter(nulls = Nulls.FAIL) is used — explicit null causes deserialization to fail (strict, enforces the non-nullable contract, useful for PATCH semantics). Additionally, when true, optional + nullable properties (required: false, nullable: true) use JsonNullable<T> = JsonNullable.undefined() to distinguish between a missing key and an explicit null. Requires jackson-databind-nullable >= 0.2.10 when used with useJackson3.| |false| -|optionalNonNullPropertyJsonInclude|The Jackson @JsonInclude policy emitted for optional, non-nullable model properties when generateJsonIncludeAnnotations is true. NONE emits no annotation, deferring fully to the global ObjectMapper inclusion policy.|
    **NON_NULL**
    Omit the property when its value is null (default, spec-safe for non-nullable fields).
    **NON_EMPTY**
    Omit the property when its value is null or considered empty.
    **NON_DEFAULT**
    Omit the property when its value equals the default.
    **NONE**
    Emit no @JsonInclude annotation; defer to the global ObjectMapper.
    |NON_NULL| -|optionalNonNullPropertyJsonSetterNulls|The Jackson @JsonSetter(nulls = ...) mode emitted for optional, non-nullable model properties when generateJsonSetterNullsAnnotations is true. SKIP ignores an explicit JSON null (keeping the field's default), FAIL rejects it. When left unset the mode is derived from openApiNullable (true -> FAIL where supported, false -> SKIP), preserving 7.24.x behavior. A per-property override set via the `x-jackson-json-setter-nulls` vendor extension always wins.|
    **SKIP**
    Emit @JsonSetter(nulls = Nulls.SKIP): silently ignore an explicit JSON null, keeping the field's default.
    **FAIL**
    Emit @JsonSetter(nulls = Nulls.FAIL): reject an explicit JSON null.
    |null| |packageName|Generated artifact package name.| |org.openapitools| |parcelizeModels|toggle "@Parcelize" for generated models| |null| |reactive|use coroutines for reactive behavior| |false| @@ -91,16 +87,13 @@ These options may be applied as additional-properties (cli) or configOptions (pl |x-discriminator-value|Used with model inheritance to specify value for discriminator that identifies current model|MODEL| |x-field-extra-annotation|Custom annotation(s) to be added to property; accepts a string or list of strings|FIELD, OPERATION_PARAMETER|null |x-operation-extra-annotation|Custom annotation(s) to be added to operation; accepts a string or list of strings|OPERATION|null -|x-extra-imports|Custom import(s) to add to the generated file that declares the annotated model, property, operation, or parameter (e.g. so custom annotations can be referenced by their short name); accepts a string or list of strings. Values are emitted verbatim (Kotlin alias imports supported) and only exact duplicates are removed|MODEL, FIELD, OPERATION, OPERATION_PARAMETER|null |x-pattern-message|Add this property whenever you need to customize the invalidation error message for the regex pattern of a variable|FIELD, OPERATION_PARAMETER|null |x-size-message|Add this property whenever you need to customize the invalidation error message for the size or length of a variable|FIELD, OPERATION_PARAMETER|null |x-minimum-message|Add this property whenever you need to customize the invalidation error message for the minimum value of a variable|FIELD, OPERATION_PARAMETER|null |x-maximum-message|Add this property whenever you need to customize the invalidation error message for the maximum value of a variable|FIELD, OPERATION_PARAMETER|null |x-kotlin-implements|Ability to specify interfaces that model must implement|MODEL|empty array |x-kotlin-implements-fields|Specify attributes that are implemented by the interface(s) added via `x-kotlin-implements`|MODEL|empty array -|x-spring-paginated|Add `org.springframework.data.domain.Pageable` to controller method. Can be used to handle `page`, `size` and `sort` query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the `Pageable` object. Applies when `library=spring-boot` or `library=spring-cloud`; ignored for other (client) libraries.|OPERATION|false -|x-jackson-json-include-policy|Manually override the resolved Jackson `@JsonInclude` policy for this property. Must be one of `ALWAYS`, `NON_NULL`, `NON_ABSENT`, `NON_EMPTY`, `NON_DEFAULT`, `USE_DEFAULTS`, `CUSTOM`, or `NONE` to emit no annotation. Always wins over the automatic required/nullable matrix and the `optionalNonNullPropertyJsonInclude` option.|FIELD|resolved automatically per the required/nullable matrix -|x-jackson-json-setter-nulls|Manually override the resolved Jackson `@JsonSetter(nulls = ...)` deserialization null-handling for this property. Must be one of `SKIP` (ignore an explicit JSON null, keeping the default), `FAIL` (reject an explicit JSON null), or `NONE` to emit no annotation. Always wins over the automatic `openApiNullable` default and the `optionalNonNullPropertyJsonSetterNulls` option, and is honored regardless of `generateJsonSetterNullsAnnotations` or whether the property is required/nullable.|FIELD|resolved automatically per the openApiNullable default +|x-spring-paginated|Add `org.springframework.data.domain.Pageable` to controller method. Can be used to handle `page`, `size` and `sort` query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the `Pageable` object. Only applies when `library=spring-boot`; ignored for client libraries (spring-cloud, spring-declarative-http-interface).|OPERATION|false ## IMPORT MAPPING diff --git a/docs/generators/kotlin.md b/docs/generators/kotlin.md index 46a8a577c96b..0edb342ddb4d 100644 --- a/docs/generators/kotlin.md +++ b/docs/generators/kotlin.md @@ -32,7 +32,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |groupId|Generated artifact package's organization (i.e. maven groupId).| |org.openapitools| |idea|Add IntelliJ Idea plugin and mark Kotlin main and test folders as source folders.| |false| |implicitHeaders|Skip header parameters in the generated API methods.| |false| -|library|Library template (sub-template) to use|
    **jvm-ktor**
    Platform: Java Virtual Machine. HTTP client: Ktor 1.6.7. JSON processing: Gson, Jackson (default).
    **jvm-okhttp4**
    [DEFAULT] Platform: Java Virtual Machine. HTTP client: OkHttp 4.2.0 (Android 5.0+ and Java 8+). JSON processing: Moshi 1.8.0.
    **jvm-spring-webclient**
    Platform: Java Virtual Machine. HTTP: Spring 5 (or 6 with useSpringBoot3 enabled) WebClient. JSON processing: Jackson.
    **jvm-spring-restclient**
    Platform: Java Virtual Machine. HTTP: Spring 6 (or 7 with useSpringBoot4 enabled) RestClient. JSON processing: Jackson.
    **jvm-retrofit2**
    Platform: Java Virtual Machine. HTTP client: Retrofit 2.6.2.
    **multiplatform**
    Platform: Kotlin multiplatform. HTTP client: Ktor 1.6.7. JSON processing: Kotlinx Serialization: 1.2.1.
    **jvm-volley**
    Platform: JVM for Android. HTTP client: Volley 1.2.1. JSON processing: gson 2.8.9 (Deprecated)
    **jvm-vertx**
    Platform: Java Virtual Machine. HTTP client: Vert.x Web Client. JSON processing: Moshi, Gson or Jackson.
    |jvm-okhttp4| +|library|Library template (sub-template) to use|
    **jvm-ktor**
    Platform: Java Virtual Machine. HTTP client: Ktor 1.6.7. JSON processing: Gson, Jackson (default).
    **jvm-okhttp4**
    [DEFAULT] Platform: Java Virtual Machine. HTTP client: OkHttp 4.2.0 (Android 5.0+ and Java 8+). JSON processing: Moshi 1.8.0.
    **jvm-spring-webclient**
    Platform: Java Virtual Machine. HTTP: Spring 5 (or 6 with useSpringBoot3 enabled) WebClient. JSON processing: Jackson.
    **jvm-spring-restclient**
    Platform: Java Virtual Machine. HTTP: Spring 6 RestClient. JSON processing: Jackson.
    **jvm-retrofit2**
    Platform: Java Virtual Machine. HTTP client: Retrofit 2.6.2.
    **multiplatform**
    Platform: Kotlin multiplatform. HTTP client: Ktor 1.6.7. JSON processing: Kotlinx Serialization: 1.2.1.
    **jvm-volley**
    Platform: JVM for Android. HTTP client: Volley 1.2.1. JSON processing: gson 2.8.9 (Deprecated)
    **jvm-vertx**
    Platform: Java Virtual Machine. HTTP client: Vert.x Web Client. JSON processing: Moshi, Gson or Jackson.
    |jvm-okhttp4| |mapFileBinaryToByteArray|Map File and Binary to ByteArray (default: false)| |false| |modelMutable|Create mutable models| |false| |moshiCodeGen|Whether to enable codegen with the Moshi library. Refer to the [official Moshi doc](https://github.com/square/moshi#codegen) for more info.| |false| @@ -50,13 +50,12 @@ These options may be applied as additional-properties (cli) or configOptions (pl |sourceFolder|source folder for generated code| |src/main/kotlin| |supportAndroidApiLevel25AndBelow|[WARNING] This flag will generate code that has a known security vulnerability. It uses `kotlin.io.createTempFile` instead of `java.nio.file.Files.createTempFile` in order to support Android API level 25 and below. For more info, please check the following links https://github.com/OpenAPITools/openapi-generator/security/advisories/GHSA-23x4-m842-fmwf, https://github.com/OpenAPITools/openapi-generator/pull/9284| |false| |useCoroutines|Whether to use the Coroutines adapter with the retrofit2 library.| |false| -|useJackson3|Use Jackson 3 dependencies (tools.jackson package). Requires serializationLibrary=jackson. Incompatible with openApiNullable.| |false| +|useJackson3|Use Jackson 3 dependencies (tools.jackson package). Not yet supported for kotlin-client; reserved for future use.| |false| |useNonAsciiHeaders|Allow to use non-ascii headers with the okhttp library| |false| |useResponseAsReturnType|When using retrofit2 and coroutines, use `Response`<`T`> as return type instead of `T`.| |true| |useRxJava3|Whether to use the RxJava3 adapter with the retrofit2 library.| |false| |useSettingsGradle|Whether the project uses settings.gradle.| |false| |useSpringBoot3|Whether to use the Spring Boot 3 with the jvm-spring-webclient library.| |false| -|useSpringBoot4|Whether to use the Spring Boot 4 with the jvm-spring-restclient library.| |false| ## SUPPORTED VENDOR EXTENSIONS diff --git a/docs/generators/php-dt.md b/docs/generators/php-dt.md index dd7c5be90a32..18ab8967f7ab 100644 --- a/docs/generators/php-dt.md +++ b/docs/generators/php-dt.md @@ -107,8 +107,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • -
  • finally
  • -
  • fn
  • for
  • foreach
  • formparams
  • @@ -126,7 +124,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • -
  • match
  • namespace
  • new
  • or
  • @@ -135,7 +132,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • -
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -150,7 +146,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • -
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php-flight.md b/docs/generators/php-flight.md index 201d5b158fb5..da33756d10f6 100644 --- a/docs/generators/php-flight.md +++ b/docs/generators/php-flight.md @@ -109,8 +109,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • -
  • finally
  • -
  • fn
  • for
  • foreach
  • formparams
  • @@ -128,7 +126,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • -
  • match
  • namespace
  • new
  • or
  • @@ -137,7 +134,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • -
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -152,7 +148,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • -
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php-laravel.md b/docs/generators/php-laravel.md index 0385c6f9e508..99dd2adc65bf 100644 --- a/docs/generators/php-laravel.md +++ b/docs/generators/php-laravel.md @@ -110,8 +110,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • -
  • finally
  • -
  • fn
  • for
  • foreach
  • formparams
  • @@ -129,7 +127,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • -
  • match
  • namespace
  • new
  • or
  • @@ -138,7 +135,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • -
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -153,7 +149,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • -
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php-lumen.md b/docs/generators/php-lumen.md index cd189777faa6..b1855c33e3f4 100644 --- a/docs/generators/php-lumen.md +++ b/docs/generators/php-lumen.md @@ -108,8 +108,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • -
  • finally
  • -
  • fn
  • for
  • foreach
  • formparams
  • @@ -127,7 +125,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • -
  • match
  • namespace
  • new
  • or
  • @@ -136,7 +133,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • -
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -151,7 +147,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • -
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php-mezzio-ph.md b/docs/generators/php-mezzio-ph.md index efa2d983634b..bd408a268a8c 100644 --- a/docs/generators/php-mezzio-ph.md +++ b/docs/generators/php-mezzio-ph.md @@ -107,8 +107,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • -
  • finally
  • -
  • fn
  • for
  • foreach
  • formparams
  • @@ -126,7 +124,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • -
  • match
  • namespace
  • new
  • or
  • @@ -135,7 +132,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • -
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -150,7 +146,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • -
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php-nextgen.md b/docs/generators/php-nextgen.md index 0ac0c8a54a61..e5f57d1487ea 100644 --- a/docs/generators/php-nextgen.md +++ b/docs/generators/php-nextgen.md @@ -110,8 +110,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • -
  • finally
  • -
  • fn
  • for
  • foreach
  • formparams
  • @@ -129,7 +127,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • -
  • match
  • namespace
  • new
  • or
  • @@ -138,7 +135,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • -
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -153,7 +149,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • -
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php-slim4.md b/docs/generators/php-slim4.md index fe6cce72a896..e243886c016e 100644 --- a/docs/generators/php-slim4.md +++ b/docs/generators/php-slim4.md @@ -109,8 +109,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • -
  • finally
  • -
  • fn
  • for
  • foreach
  • formparams
  • @@ -128,7 +126,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • -
  • match
  • namespace
  • new
  • or
  • @@ -137,7 +134,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • -
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -152,7 +148,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • -
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php.md b/docs/generators/php.md index cc72eb276096..68830fa61a66 100644 --- a/docs/generators/php.md +++ b/docs/generators/php.md @@ -110,8 +110,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • -
  • finally
  • -
  • fn
  • for
  • foreach
  • formparams
  • @@ -129,7 +127,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • -
  • match
  • namespace
  • new
  • or
  • @@ -138,7 +135,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • -
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -153,7 +149,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • -
  • yield
  • ## FEATURE SET diff --git a/docs/generators/python-pydantic-v1.md b/docs/generators/python-pydantic-v1.md index eff68837b4cb..0d8b836a7b29 100644 --- a/docs/generators/python-pydantic-v1.md +++ b/docs/generators/python-pydantic-v1.md @@ -24,7 +24,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| |generateSourceCodeOnly|Specifies that only a library source code is to be generated.| |false| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true| -|library|library template (sub-template) to use: asyncio, urllib3| |urllib3| +|library|library template (sub-template) to use: asyncio, tornado (deprecated), urllib3| |urllib3| |mapNumberTo|Map number to Union[StrictFloat, StrictInt], StrictStr or float.| |Union[StrictFloat, StrictInt]| |packageName|python package name (convention: snake_case).| |openapi_client| |packageUrl|python package URL.| |null| diff --git a/docs/generators/python.md b/docs/generators/python.md index 01a156d5e06a..d48066a8d0a0 100644 --- a/docs/generators/python.md +++ b/docs/generators/python.md @@ -27,7 +27,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |generateSourceCodeOnly|Specifies that only a library source code is to be generated.| |false| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true| |lazyImports|Enable lazy imports.| |false| -|library|library template (sub-template) to use: asyncio, urllib3, httpx| |urllib3| +|library|library template (sub-template) to use: asyncio, tornado (deprecated), urllib3, httpx| |urllib3| |mapNumberTo|Map number to Union[StrictFloat, StrictInt], StrictFloat, float or Decimal.| |Union[StrictFloat, StrictInt]| |packageName|python package name (convention: snake_case).| |openapi_client| |packageUrl|python package URL.| |null| @@ -101,8 +101,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • for
  • form_params
  • from
  • -
  • from_dict
  • -
  • from_json
  • global
  • header_params
  • if
  • @@ -112,22 +110,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • json
  • lambda
  • local_var_files
  • -
  • model_computed_fields
  • -
  • model_config
  • -
  • model_construct
  • -
  • model_copy
  • -
  • model_dump
  • -
  • model_dump_json
  • -
  • model_extra
  • -
  • model_fields
  • -
  • model_fields_set
  • -
  • model_json_schema
  • -
  • model_parametrized_name
  • -
  • model_post_init
  • -
  • model_rebuild
  • -
  • model_validate
  • -
  • model_validate_json
  • -
  • model_validate_strings
  • none
  • nonlocal
  • not
  • @@ -142,9 +124,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • return
  • schema
  • self
  • -
  • to_dict
  • -
  • to_json
  • -
  • to_str
  • true
  • try
  • while
  • diff --git a/docs/generators/scala-sttp4-jsoniter.md b/docs/generators/scala-sttp4-jsoniter.md index 01e169ca73bd..c0a61a46a479 100644 --- a/docs/generators/scala-sttp4-jsoniter.md +++ b/docs/generators/scala-sttp4-jsoniter.md @@ -23,7 +23,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |enumUnknownDefaultCase|If the server adds new enum cases, that are unknown by an old spec/client, the client will fail to parse the network response. With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the server sends an enum case that is not known by the client/spec, they can safely fallback to this case.|
    **false**
    No changes to the enums are made, this is the default option.
    **true**
    With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the enum case sent by the server is not known by the client/spec, can safely be decoded to this case.
    |false| -|jsoniterVersion|The version of jsoniter-scala library| |2.40.1| +|jsoniterVersion|The version of jsoniter-scala library| |2.39.1| |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| |mainPackage|Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'| |org.openapitools.client| |modelPackage|package for generated models| |null| diff --git a/docs/generators/spring.md b/docs/generators/spring.md index 8fa2e4509459..c04f804b809d 100644 --- a/docs/generators/spring.md +++ b/docs/generators/spring.md @@ -31,7 +31,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |artifactUrl|artifact URL in generated pom.xml| |https://github.com/openapitools/openapi-generator| |artifactVersion|artifact version in generated pom.xml. This also becomes part of the generated library's filename. If not provided, uses the version from the OpenAPI specification file. If that's also not present, uses the default value of the artifactVersion option.| |1.0.0| |async|use async Callable controllers| |false| -|autoXSpringPaginated|Automatically add x-spring-paginated to operations that have 'page', 'size', and 'sort' query parameters. When enabled, operations with all three parameters will have Pageable support automatically applied. Operations with x-spring-paginated explicitly set to false will not be auto-detected. Only applies when library is spring-boot or spring-cloud.| |false| +|autoXSpringPaginated|Automatically add x-spring-paginated to operations that have 'page', 'size', and 'sort' query parameters. When enabled, operations with all three parameters will have Pageable support automatically applied. Operations with x-spring-paginated explicitly set to false will not be auto-detected. Only applies when library=spring-boot.| |false| |basePackage|base package (invokerPackage) for generated code| |org.openapitools| |bigDecimalAsString|Treat BigDecimal values as Strings to avoid precision loss.| |false| |booleanGetterPrefix|Set booleanGetterPrefix| |get| @@ -57,10 +57,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl |generateBuilders|Whether to generate builders for models| |false| |generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false| |generateGenericResponseEntity|Use a generic type for the `ResponseEntity` wrapping return values of generated API methods. If enabled, method are generated with return type ResponseEntity<?>| |false| -|generateJsonIncludeAnnotations|Whether to generate policy @JsonInclude annotations on model properties. When true, emits spec-honest annotations (required-field protection and the optional non-nullable policy from optionalNonNullPropertyJsonInclude). When false, none are generated and the global ObjectMapper owns inclusion. When left unset it defaults to false (7.23.0-equivalent output) and logs a warning; set it explicitly to silence the warning. A per-property override set via the `x-jackson-json-include-policy` vendor extension is always honored regardless of this flag.| |false| -|generateJsonSetterNullsAnnotations|Whether to generate @JsonSetter(nulls = ...) annotations on optional non-nullable model properties. When true, emits @JsonSetter so an explicit null in the payload does not overwrite the field. When false, none are generated and deserialization null-handling defers to the global ObjectMapper. When left unset it defaults to false (7.23.0-equivalent output) and logs a warning; set it explicitly to silence the warning.| |false| -|generatePageableConstraintValidation|Generate a @ValidPageable annotation and PageableConstraintValidator class, and apply @ValidPageable to the injected Pageable parameter of operations whose 'page' or 'size' parameter specifies a maximum constraint. The annotation enforces those constraints on the Pageable object that replaces the individual page/size query parameters. Requires useBeanValidation=true and library is spring-boot or spring-cloud.| |false| -|generateSortValidation|Generate a @ValidSort annotation and SortValidator class, and apply @ValidSort to the injected Pageable parameter of operations whose 'sort' parameter has enum values. The annotation validates that sort values in the Pageable object match the allowed enum values from the spec. Requires useBeanValidation=true and library is spring-boot or spring-cloud.| |false| +|generatePageableConstraintValidation|Generate a @ValidPageable annotation and PageableConstraintValidator class, and apply @ValidPageable to the injected Pageable parameter of operations whose 'page' or 'size' parameter specifies a maximum constraint. The annotation enforces those constraints on the Pageable object that replaces the individual page/size query parameters. Requires useBeanValidation=true and library=spring-boot.| |false| +|generateSortValidation|Generate a @ValidSort annotation and SortValidator class, and apply @ValidSort to the injected Pageable parameter of operations whose 'sort' parameter has enum values. The annotation validates that sort values in the Pageable object match the allowed enum values from the spec. Requires useBeanValidation=true and library=spring-boot.| |false| |generatedConstructorWithRequiredArgs|Whether to generate constructors with required args for models| |true| |groupId|groupId in generated pom.xml| |org.openapitools| |hateoas|Use Spring HATEOAS library to allow adding HATEOAS links| |false| @@ -78,8 +76,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |optionalAcceptNullable|Use `ofNullable` instead of just `of` to accept null values when using Optional.| |true| -|optionalNonNullPropertyJsonInclude|The Jackson @JsonInclude policy emitted for optional, non-nullable model properties when generateJsonIncludeAnnotations is true. NONE emits no annotation, deferring fully to the global ObjectMapper inclusion policy.|
    **NON_NULL**
    Omit the property when its value is null (default, spec-safe for non-nullable fields).
    **NON_EMPTY**
    Omit the property when its value is null or considered empty.
    **NON_DEFAULT**
    Omit the property when its value equals the default.
    **NONE**
    Emit no @JsonInclude annotation; defer to the global ObjectMapper.
    |NON_NULL| -|optionalNonNullPropertyJsonSetterNulls|The Jackson @JsonSetter(nulls = ...) mode emitted for optional, non-nullable model properties when generateJsonSetterNullsAnnotations is true. SKIP ignores an explicit JSON null (keeping the field's default), FAIL rejects it. When left unset the mode is derived from openApiNullable (true -> FAIL where supported, false -> SKIP), preserving 7.24.x behavior. A per-property override set via the `x-jackson-json-setter-nulls` vendor extension always wins.|
    **SKIP**
    Emit @JsonSetter(nulls = Nulls.SKIP): silently ignore an explicit JSON null, keeping the field's default.
    **FAIL**
    Emit @JsonSetter(nulls = Nulls.FAIL): reject an explicit JSON null.
    |null| |optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| @@ -103,7 +99,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |sourceFolder|source folder for generated code| |src/main/java| |springApiVersion|Value for 'version' attribute in @RequestMapping (for Spring 7 and above).| |null| -|springSecurityAuthorityPrefix|Prefix added to OAuth2/OpenID Connect scopes when generating Spring Security authorities.| |SCOPE_| |substituteGenericPagedModel|Detect schemas that represent paginated responses (an object with a 'content' array property and a 'page' pagination-metadata property) and replace their generated references with PagedModel<T>. By default this uses a generated type in the config package (default 'org.openapitools.configuration'), but `importMappings.PagedModel` can override it to a custom/FQCN-mapped type. The detected page schemas and the pagination metadata schema are suppressed from code generation.| |false| |testOutput|Set output folder for models and APIs tests| |${project.build.directory}/generated-test-sources/openapi| |title|server title name or client service name| |OpenAPI Spring| @@ -126,7 +121,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |useSpringBoot4|Generate code and provide dependencies for use with Spring Boot 4.x. (Use jakarta instead of javax in imports). Enabling this option will also enable `useJakartaEe`.| |false| |useSpringBuiltInValidation|Disable `@Validated` at the class level when using built-in validation.| |false| |useSpringController|Annotate the generated API as a Spring Controller| |false| -|useSpringSecurityPreAuthorize|Generate Spring Security @PreAuthorize annotations from OAuth2/OpenID Connect security scopes.| |false| |useSwaggerUI|Open the OpenApi specification in swagger-ui. Will also import and configure needed dependencies| |true| |useTags|use tags for creating interface and controller classnames| |false| |virtualService|Generates the virtual service. For more details refer - https://github.com/virtualansoftware/virtualan/wiki| |false| @@ -146,15 +140,13 @@ These options may be applied as additional-properties (cli) or configOptions (pl |x-class-extra-annotation|Custom annotation(s) to be added to model; accepts a string or list of strings|MODEL|null |x-field-extra-annotation|Custom annotation(s) to be added to property; accepts a string or list of strings|FIELD, OPERATION_PARAMETER|null |x-operation-extra-annotation|Custom annotation(s) to be added to operation; accepts a string or list of strings|OPERATION|null -|x-spring-paginated|Add `org.springframework.data.domain.Pageable` to controller method. Can be used to handle `page`, `size` and `sort` query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the `Pageable` object. Applies when `library=spring-boot` or `library=spring-cloud`; ignored for other (client) libraries.|OPERATION|false +|x-spring-paginated|Add `org.springframework.data.domain.Pageable` to controller method. Can be used to handle `page`, `size` and `sort` query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the `Pageable` object. Only applies when `library=spring-boot`; ignored for client libraries (spring-cloud, spring-declarative-http-interface).|OPERATION|false |x-version-param|Marker property that tells that this parameter would be used for endpoint versioning. Applicable for headers & query params. true/false|OPERATION_PARAMETER|null |x-pattern-message|Add this property whenever you need to customize the invalidation error message for the regex pattern of a variable|FIELD, OPERATION_PARAMETER|null |x-size-message|Add this property whenever you need to customize the invalidation error message for the size or length of a variable|FIELD, OPERATION_PARAMETER|null |x-minimum-message|Add this property whenever you need to customize the invalidation error message for the minimum value of a variable|FIELD, OPERATION_PARAMETER|null |x-maximum-message|Add this property whenever you need to customize the invalidation error message for the maximum value of a variable|FIELD, OPERATION_PARAMETER|null |x-spring-api-version|Value for 'version' attribute in @RequestMapping (for Spring 7 and above).|OPERATION|null -|x-jackson-json-include-policy|Manually override the resolved Jackson `@JsonInclude` policy for this property. Must be one of `ALWAYS`, `NON_NULL`, `NON_ABSENT`, `NON_EMPTY`, `NON_DEFAULT`, `USE_DEFAULTS`, `CUSTOM`, or `NONE` to emit no annotation. Always wins over the automatic required/nullable matrix and the `optionalNonNullPropertyJsonInclude` option.|FIELD|resolved automatically per the required/nullable matrix -|x-jackson-json-setter-nulls|Manually override the resolved Jackson `@JsonSetter(nulls = ...)` deserialization null-handling for this property. Must be one of `SKIP` (ignore an explicit JSON null, keeping the default), `FAIL` (reject an explicit JSON null), or `NONE` to emit no annotation. Always wins over the automatic `openApiNullable` default and the `optionalNonNullPropertyJsonSetterNulls` option, and is honored regardless of `generateJsonSetterNullsAnnotations` or whether the property is required/nullable.|FIELD|resolved automatically per the openApiNullable default ## IMPORT MAPPING diff --git a/docs/generators/typescript-angular.md b/docs/generators/typescript-angular.md index e3a8ba54e386..1b3d1fb87e38 100644 --- a/docs/generators/typescript-angular.md +++ b/docs/generators/typescript-angular.md @@ -11,7 +11,7 @@ title: Documentation for the typescript-angular Generator | generator type | CLIENT | | | generator language | Typescript | | | generator default templating engine | mustache | | -| helpTxt | Generates a TypeScript Angular (9.x - 22.x) client library. | | +| helpTxt | Generates a TypeScript Angular (9.x - 21.x) client library. | | ## CONFIG OPTIONS These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. @@ -34,7 +34,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name. Only change it if you provide your own run-time code for (de-)serialization of models| |original| |modelSuffix|The suffix of the generated model.| |null| |ngPackagrVersion|The version of ng-packagr compatible with Angular (see ngVersion option).| |null| -|ngVersion|The version of Angular. (At least 9.0.0)| |22.0.0| +|ngVersion|The version of Angular. (At least 9.0.0)| |21.0.0| |npmName|The name under which you want to publish generated npm package. Required to generate a full package| |null| |npmRepository|Use this property to set an url your private npmRepo in the package.json| |null| |npmVersion|The version of your npm package. If not provided, using the version from the OpenAPI specification file.| |1.0.0| diff --git a/docs/generators/typescript-axios.md b/docs/generators/typescript-axios.md index 09cb16e27759..5b06ed9e205d 100644 --- a/docs/generators/typescript-axios.md +++ b/docs/generators/typescript-axios.md @@ -20,7 +20,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|axiosVersion|Use this property to override the axios version in package.json| |^1.18.0| +|axiosVersion|Use this property to override the axios version in package.json| |^1.16.0| |disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |enumNameSuffix|Suffix that will be appended to all enum names.| |Enum| diff --git a/docs/generators/typescript-fetch.md b/docs/generators/typescript-fetch.md index a51cfe50c40d..37762fabc0d9 100644 --- a/docs/generators/typescript-fetch.md +++ b/docs/generators/typescript-fetch.md @@ -19,7 +19,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl | Option | Description | Values | Default | | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| -|dateLibrary|Option. Date library to use.|
    **date**
    Native Date. `format: date` and `format: date-time` are both mapped to Date and (de)serialized by the runtime.
    **string**
    Plain string. Values are passed through untouched, leaving date handling to the consumer.
    |date| |disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |enumNameSuffix|Suffix that will be appended to all enum names.| |Enum| From fbd92e3ac0bc9310d27e644ba414e0b854fc2759 Mon Sep 17 00:00:00 2001 From: Jorge Date: Wed, 2 Sep 2026 16:36:30 +0200 Subject: [PATCH 11/15] chore: update version to 7.26.0-SNAPSHOT and bump dependencies --- .../org/openapitools/client/model/Foo.java | 10 +- .../.openapi-generator/FILES | 21 +- .../.openapi-generator/VERSION | 2 +- .../README.md | 23 +- .../api/openapi.yaml | 166 +++++++++ .../build.gradle | 10 +- .../docs/Foo.md | 7 + .../git_push.sh | 31 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../pom.xml | 4 +- .../org/openapitools/client/ApiClient.java | 59 +++- .../client/JavaTimeFormatter.java | 2 +- .../client/RFC3339DateFormat.java | 2 +- .../client/ServerConfiguration.java | 2 +- .../openapitools/client/ServerVariable.java | 2 +- .../org/openapitools/client/StringUtil.java | 2 +- .../openapitools/client/auth/ApiKeyAuth.java | 2 +- .../client/auth/Authentication.java | 2 +- .../client/auth/HttpBasicAuth.java | 2 +- .../client/auth/HttpBearerAuth.java | 2 +- .../org/openapitools/client/model/Foo.java | 252 +++++++++++++- .../.openapi-generator/FILES | 20 +- .../.openapi-generator/VERSION | 2 +- .../README.md | 23 +- .../api/openapi.yaml | 166 +++++++++ .../build.gradle | 10 +- .../docs/Foo.md | 7 + .../git_push.sh | 31 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../pom.xml | 4 +- .../org/openapitools/client/ApiClient.java | 2 +- .../java/org/openapitools/client/BaseApi.java | 2 +- .../client/JavaTimeFormatter.java | 2 +- .../client/RFC3339DateFormat.java | 2 +- .../client/RFC3339InstantDeserializer.java | 2 +- .../client/RFC3339JavaTimeModule.java | 2 +- .../client/ServerConfiguration.java | 2 +- .../openapitools/client/ServerVariable.java | 2 +- .../openapitools/client/auth/ApiKeyAuth.java | 2 +- .../client/auth/Authentication.java | 2 +- .../client/auth/HttpBasicAuth.java | 2 +- .../client/auth/HttpBearerAuth.java | 2 +- .../org/openapitools/client/model/Foo.java | 252 +++++++++++++- .../.openapi-generator/FILES | 21 +- .../.openapi-generator/VERSION | 2 +- .../README.md | 23 +- .../api/openapi.yaml | 166 +++++++++ .../build.gradle | 8 +- .../docs/Foo.md | 7 + .../git_push.sh | 31 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../pom.xml | 2 +- .../org/openapitools/client/ApiClient.java | 57 +++- .../client/JavaTimeFormatter.java | 2 +- .../client/RFC3339DateFormat.java | 2 +- .../client/RFC3339InstantDeserializer.java | 2 +- .../client/RFC3339JavaTimeModule.java | 2 +- .../client/ServerConfiguration.java | 2 +- .../openapitools/client/ServerVariable.java | 2 +- .../org/openapitools/client/StringUtil.java | 2 +- .../openapitools/client/auth/ApiKeyAuth.java | 2 +- .../client/auth/Authentication.java | 2 +- .../client/auth/HttpBasicAuth.java | 2 +- .../client/auth/HttpBearerAuth.java | 2 +- .../org/openapitools/client/model/Foo.java | 252 +++++++++++++- .../.openapi-generator/FILES | 4 + .../.openapi-generator/VERSION | 2 +- .../java/org/openapitools/api/FileApi.java | 26 +- .../java/org/openapitools/api/FooApi.java | 13 +- .../java/org/openapitools/api/UploadApi.java | 7 +- .../main/java/org/openapitools/model/Foo.java | 316 ++++++++++++++++-- 71 files changed, 1854 insertions(+), 253 deletions(-) diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-openapiNullable/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-openapiNullable/src/main/java/org/openapitools/client/model/Foo.java index c061603bd5a2..bda111de63f5 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-openapiNullable/src/main/java/org/openapitools/client/model/Foo.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-openapiNullable/src/main/java/org/openapitools/client/model/Foo.java @@ -167,7 +167,7 @@ public Foo nullableDt(java.time.@Nullable Instant nullableDt) { @JsonIgnore public java.time.@Nullable Instant getNullableDt() { - return nullableDt.orElse(null); + return nullableDt.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_DT, required = false) @@ -225,7 +225,7 @@ public Foo nullableBinary(@Nullable File nullableBinary) { @JsonIgnore public @Nullable File getNullableBinary() { - return nullableBinary.orElse(null); + return nullableBinary.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_BINARY, required = false) @@ -336,7 +336,7 @@ public Foo addNullableListMinIntemsItem(java.time.Instant nullableListMinIntemsI @JsonIgnore public @Nullable List getNullableListMinIntems() { - return nullableListMinIntems.orElse(null); + return nullableListMinIntems.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS, required = false) @@ -419,7 +419,7 @@ public Foo nullableNumber(java.math.@Nullable BigDecimal nullableNumber) { @JsonIgnore public java.math.@Nullable BigDecimal getNullableNumber() { - return nullableNumber.orElse(null); + return nullableNumber.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_NUMBER, required = false) @@ -502,7 +502,7 @@ public Foo nullableColor(@Nullable String nullableColor) { @JsonIgnore public @Nullable String getNullableColor() { - return nullableColor.orElse(null); + return nullableColor.orElse(null); } @JsonProperty(value = JSON_PROPERTY_NULLABLE_COLOR, required = false) diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES index 399326b1defb..05a21f4fc138 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES @@ -5,8 +5,13 @@ README.md api/openapi.yaml build.gradle build.sbt -docs/DefaultApi.md +docs/FileApi.md +docs/FileContent.md docs/Foo.md +docs/FooApi.md +docs/RequiredAndNullable.md +docs/RequiredAndNullableApi.md +docs/UploadApi.md git_push.sh gradle.properties gradle/wrapper/gradle-wrapper.jar @@ -17,17 +22,29 @@ pom.xml settings.gradle src/main/AndroidManifest.xml src/main/java/org/openapitools/client/ApiClient.java +src/main/java/org/openapitools/client/ExceptionProvider.java src/main/java/org/openapitools/client/JavaTimeFormatter.java src/main/java/org/openapitools/client/RFC3339DateFormat.java src/main/java/org/openapitools/client/ServerConfiguration.java src/main/java/org/openapitools/client/ServerVariable.java src/main/java/org/openapitools/client/StringUtil.java -src/main/java/org/openapitools/client/api/DefaultApi.java +src/main/java/org/openapitools/client/api/FileApi.java +src/main/java/org/openapitools/client/api/FooApi.java +src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java +src/main/java/org/openapitools/client/api/UploadApi.java src/main/java/org/openapitools/client/api/package-info.java src/main/java/org/openapitools/client/auth/ApiKeyAuth.java src/main/java/org/openapitools/client/auth/Authentication.java src/main/java/org/openapitools/client/auth/HttpBasicAuth.java src/main/java/org/openapitools/client/auth/HttpBearerAuth.java +src/main/java/org/openapitools/client/model/FileContent.java src/main/java/org/openapitools/client/model/Foo.java +src/main/java/org/openapitools/client/model/RequiredAndNullable.java src/main/java/org/openapitools/client/model/package-info.java src/main/java/org/openapitools/client/package-info.java +src/test/java/org/openapitools/client/api/FileApiTest.java +src/test/java/org/openapitools/client/api/FooApiTest.java +src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java +src/test/java/org/openapitools/client/api/UploadApiTest.java +src/test/java/org/openapitools/client/model/FileContentTest.java +src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION index 8fc8df61083a..32a8cfaceeb9 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION @@ -1 +1 @@ -7.25.0-SNAPSHOT +7.26.0-SNAPSHOT diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/README.md b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/README.md index 6d1d4a84364f..ca61f2d3af73 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/README.md +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/README.md @@ -4,7 +4,7 @@ jspecify - API version: 1.0.0 -- Generator version: 7.25.0-SNAPSHOT +- Generator version: 7.26.0-SNAPSHOT test fully qualified name and jspecify @@ -84,20 +84,21 @@ Please follow the [installation](#installation) instruction and execute the foll import org.openapitools.client.*; import org.openapitools.client.auth.*; import org.openapitools.client.model.*; -import org.openapitools.client.api.DefaultApi; +import org.openapitools.client.api.FileApi; -public class DefaultApiExample { +public class FileApiExample { public static void main(String[] args) { ApiClient defaultClient = new ApiClient(); defaultClient.setBasePath("http://localhost"); - DefaultApi apiInstance = new DefaultApi(defaultClient); + FileApi apiInstance = new FileApi(defaultClient); String id = "id_example"; // String | try { - apiInstance.fileIdGet(id); + FileContent result = apiInstance.fileIdGet(id); + System.out.println(result); } catch (HttpStatusCodeException e) { - System.err.println("Exception when calling DefaultApi#fileIdGet"); + System.err.println("Exception when calling FileApi#fileIdGet"); System.err.println("Status code: " + e.getStatusCode().value()); System.err.println("Reason: " + e.getResponseBodyAsString()); System.err.println("Response headers: " + e.getResponseHeaders()); @@ -114,14 +115,18 @@ All URIs are relative to *http://localhost* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*DefaultApi* | [**fileIdGet**](docs/DefaultApi.md#fileIdGet) | **GET** /file/{id} | -*DefaultApi* | [**fooDtParamGet**](docs/DefaultApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | -*DefaultApi* | [**uploadPost**](docs/DefaultApi.md#uploadPost) | **POST** /upload | +*FileApi* | [**fileIdGet**](docs/FileApi.md#fileIdGet) | **GET** /file/{id} | +*FooApi* | [**fooDtParamGet**](docs/FooApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | +*RequiredAndNullableApi* | [**requiredAndNullablePost**](docs/RequiredAndNullableApi.md#requiredAndNullablePost) | **POST** /requiredAndNullable | +*UploadApi* | [**uploadFilesPost**](docs/UploadApi.md#uploadFilesPost) | **POST** /uploadFiles | +*UploadApi* | [**uploadPost**](docs/UploadApi.md#uploadPost) | **POST** /upload | ## Documentation for Models + - [FileContent](docs/FileContent.md) - [Foo](docs/Foo.md) + - [RequiredAndNullable](docs/RequiredAndNullable.md) diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml index 14c4c1ed2afc..15c1f4176a50 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml @@ -5,6 +5,15 @@ info: version: 1.0.0 servers: - url: / +tags: +- description: requiredAndNullable + name: requiredAndNullable +- description: foo + name: foo +- description: upload + name: upload +- description: file + name: file paths: /foo/{dtParam}: get: @@ -33,6 +42,14 @@ paths: format: date-time type: string style: form + - explode: true + in: query + name: color + required: false + schema: + default: red + type: string + style: form responses: default: content: @@ -40,6 +57,29 @@ paths: schema: $ref: "#/components/schemas/Foo" description: response + tags: + - foo + x-accepts: + - application/json + /requiredAndNullable: + post: + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/RequiredAndNullable" + description: bodyWithRequiredAndNullableAttributes + required: true + responses: + default: + content: + application/json: + schema: + $ref: "#/components/schemas/RequiredAndNullable" + description: response + tags: + - requiredAndNullable + x-content-type: application/json x-accepts: - application/json /upload: @@ -53,6 +93,24 @@ paths: responses: default: description: ok + tags: + - upload + x-content-type: multipart/form-data + x-accepts: + - application/json + /uploadFiles: + post: + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/_uploadFiles_post_request" + description: file + responses: + default: + description: ok + tags: + - upload x-content-type: multipart/form-data x-accepts: - application/json @@ -68,7 +126,13 @@ paths: style: simple responses: "200": + content: + application/json: + schema: + $ref: "#/components/schemas/FileContent" description: ok + tags: + - file x-accepts: - application/json components: @@ -76,22 +140,39 @@ components: Foo: example: dt: 2000-01-23T04:56:07.000+00:00 + nullableDt: 2000-01-23T04:56:07.000+00:00 binary: "" + nullableBinary: "" listOfDt: - 2000-01-23T04:56:07.000+00:00 - 2000-01-23T04:56:07.000+00:00 listMinIntems: - 2000-01-23T04:56:07.000+00:00 - 2000-01-23T04:56:07.000+00:00 + nullableListMinIntems: + - 2000-01-23T04:56:07.000+00:00 + - 2000-01-23T04:56:07.000+00:00 requiredDt: 2000-01-23T04:56:07.000+00:00 number: 0.8008281904610115 + nullableNumber: 6.027456183070403 + color: red + requiredColor: red + nullableColor: red properties: dt: format: date-time type: string + nullableDt: + format: date-time + nullable: true + type: string binary: format: binary type: string + nullableBinary: + format: binary + nullable: true + type: string listOfDt: items: format: date-time @@ -103,17 +184,102 @@ components: type: string minItems: 1 type: array + nullableListMinIntems: + items: + format: date-time + type: string + minItems: 1 + nullable: true + type: array requiredDt: format: date-time type: string number: type: number + nullableNumber: + nullable: true + type: number + color: + default: red + type: string + requiredColor: + default: red + type: string + nullableColor: + default: red + nullable: true + type: string required: + - requiredColor - requiredDt + RequiredAndNullable: + example: + str: str + file: "" + color: red + onlyRequired: onlyRequired + list: + - list + - list + properties: + str: + nullable: true + type: string + file: + format: binary + nullable: true + type: string + color: + default: red + nullable: true + type: string + onlyRequired: + type: string + list: + items: + type: string + nullable: true + type: array + required: + - color + - file + - list + - onlyRequired + - str + type: object + FileContent: + example: + name: name + size: 0 + virusScan: clean + properties: + name: + readOnly: true + type: string + size: + readOnly: true + type: integer + virusScan: + enum: + - clean + - detected + readOnly: true + type: string + required: + - name + type: object _upload_post_request: properties: file: format: binary type: string type: object + _uploadFiles_post_request: + properties: + file: + items: + format: binary + type: string + type: array + type: object diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle index 0d4b51764b09..aa64bbdcbf2c 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle @@ -78,8 +78,10 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'java' apply plugin: 'maven-publish' - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } publishing { publications { @@ -97,9 +99,9 @@ if(hasProperty('target') && target == 'android') { } ext { - jackson_version = "3.1.0" + jackson_version = "3.1.5" jackson_annotations_version = "2.21" - spring_web_version = "7.0.5" + spring_web_version = "7.0.8" jakarta_annotation_version = "3.0.0" bean_validation_version = "3.1.1" jodatime_version = "2.14.0" diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md index d03d21cd097d..9237adf1033e 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md @@ -8,11 +8,18 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| |**dt** | **java.time.Instant** | | [optional] | +|**nullableDt** | **java.time.Instant** | | [optional] | |**binary** | **File** | | [optional] | +|**nullableBinary** | **File** | | [optional] | |**listOfDt** | **List<java.time.Instant>** | | [optional] | |**listMinIntems** | **List<java.time.Instant>** | | [optional] | +|**nullableListMinIntems** | **List<java.time.Instant>** | | [optional] | |**requiredDt** | **java.time.Instant** | | | |**number** | **java.math.BigDecimal** | | [optional] | +|**nullableNumber** | **java.math.BigDecimal** | | [optional] | +|**color** | **String** | | [optional] | +|**requiredColor** | **String** | | | +|**nullableColor** | **String** | | [optional] | diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh index f53a75d4fabe..a35991cd51a1 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh @@ -8,24 +8,24 @@ git_repo_id=$2 release_note=$3 git_host=$4 -if [ "$git_host" = "" ]; then +if [ -z "${git_host}" ]; then git_host="github.com" - echo "[INFO] No command line input provided. Set \$git_host to $git_host" + echo "[INFO] No command line input provided. Set \${git_host} to ${git_host}" fi -if [ "$git_user_id" = "" ]; then +if [ -z "${git_user_id}" ]; then git_user_id="GIT_USER_ID" - echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" + echo "[INFO] No command line input provided. Set \${git_user_id} to ${git_user_id}" fi -if [ "$git_repo_id" = "" ]; then +if [ -z "${git_repo_id}" ]; then git_repo_id="GIT_REPO_ID" - echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" + echo "[INFO] No command line input provided. Set \${git_repo_id} to ${git_repo_id}" fi -if [ "$release_note" = "" ]; then +if [ -z "${release_note}" ]; then release_note="Minor update" - echo "[INFO] No command line input provided. Set \$release_note to $release_note" + echo "[INFO] No command line input provided. Set \${release_note} to ${release_note}" fi # Initialize the local directory as a Git repository @@ -35,19 +35,16 @@ git init git add . # Commits the tracked changes and prepares them to be pushed to a remote repository. -git commit -m "$release_note" +git commit -m "${release_note}" # Sets the new remote -git_remote=$(git remote) -if [ "$git_remote" = "" ]; then # git remote not defined - - if [ "$GIT_TOKEN" = "" ]; then - echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." - git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git +if [ -z "$(git remote)" ]; then # git remote not defined + if [ -z "${GIT_TOKEN:-}" ]; then + echo "[INFO] \${GIT_TOKEN} (environment variable) is not set. Using the git credential in your environment." + git remote add origin "https://${git_host}/${git_user_id}/${git_repo_id}.git" else - git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git + git remote add origin "https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git" fi - fi git pull origin master diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties index b82aa23a4f05..4f5eb9dcc0ef 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml index c6ecc801ab45..0d09a3c0c0af 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml @@ -253,8 +253,8 @@ UTF-8 - 7.0.5 - 3.1.0 + 7.0.8 + 3.1.5 3.0.0 2.21 diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java index 25a21961bc13..6b2cf59a04f8 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java @@ -62,17 +62,17 @@ import org.openapitools.client.auth.HttpBearerAuth; import org.openapitools.client.auth.ApiKeyAuth; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class ApiClient extends JavaTimeFormatter { public enum CollectionFormat { CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null); - protected final String separator; + private final String separator; CollectionFormat(String separator) { this.separator = separator; } - protected String collectionToString(Collection collection) { + public String collectionToString(Collection collection) { return StringUtils.collectionToDelimitedString(collection, separator); } } @@ -96,6 +96,13 @@ protected String collectionToString(Collection collection) { protected final JsonMapper mapper; protected Map authentications; + /** + * The {@link ExceptionProvider} used to create exceptions thrown by this client. + * Defaults to {@link ExceptionProvider#DEFAULT}. Can be replaced to customize the exceptions + * thrown by this client by calling {@link #setExceptionProvider(ExceptionProvider)}. + */ + protected ExceptionProvider exceptionProvider = ExceptionProvider.DEFAULT; + public ApiClient() { this(null); @@ -127,6 +134,9 @@ public static DateFormat createDefaultDateFormat() { } public static JsonMapper createDefaultMapper(@Nullable DateFormat dateFormat) { + if (null == dateFormat) { + dateFormat = createDefaultDateFormat(); + } return JsonMapper.builder() .defaultDateFormat(dateFormat) .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) @@ -148,7 +158,7 @@ protected void init() { public static RestClient.Builder buildRestClientBuilder(JsonMapper mapper) { Consumer messageConverters = builder -> { - builder.addCustomConverter(new JacksonJsonHttpMessageConverter(mapper)); + builder.registerDefaults().withJsonConverter(new JacksonJsonHttpMessageConverter(mapper)); }; return RestClient.builder().configureMessageConverters(messageConverters); @@ -233,6 +243,25 @@ public Map getAuthentications() { return authentications; } + /** + * Get the current {@link ExceptionProvider}. + * @return the exception provider + */ + public ExceptionProvider getExceptionProvider() { + return exceptionProvider; + } + + /** + * Set a custom {@link ExceptionProvider} to control which exception types are thrown + * by this client. + * @param exceptionProvider the exception provider + * @return this client instance + */ + public ApiClient setExceptionProvider(ExceptionProvider exceptionProvider) { + this.exceptionProvider = exceptionProvider; + return this; + } + /** * Get authentication for the given name. * @@ -254,7 +283,7 @@ public void setBearerToken(String bearerToken) { return; } } - throw new RuntimeException("No Bearer authentication configured!"); + throw exceptionProvider.bearerAuthException(); } /** @@ -269,7 +298,7 @@ public void setBearerToken(Supplier tokenSupplier) { return; } } - throw new RuntimeException("No Bearer authentication configured!"); + throw exceptionProvider.bearerAuthException(); } /** @@ -283,7 +312,7 @@ public void setUsername(String username) { return; } } - throw new RuntimeException("No HTTP basic authentication configured!"); + throw exceptionProvider.httpBasicAuthException(); } /** @@ -297,7 +326,7 @@ public void setPassword(String password) { return; } } - throw new RuntimeException("No HTTP basic authentication configured!"); + throw exceptionProvider.httpBasicAuthException(); } /** @@ -311,7 +340,7 @@ public void setApiKey(String apiKey) { return; } } - throw new RuntimeException("No API key authentication configured!"); + throw exceptionProvider.apiKeyAuthException(); } /** @@ -325,7 +354,7 @@ public void setApiKeyPrefix(String apiKeyPrefix) { return; } } - throw new RuntimeException("No API key authentication configured!"); + throw exceptionProvider.apiKeyAuthException(); } /** @@ -380,7 +409,7 @@ public Date parseDate(String str) { try { return dateFormat.parse(str); } catch (ParseException e) { - throw new RuntimeException(e); + throw exceptionProvider.dateTimeException(e); } } @@ -448,7 +477,7 @@ public MultiValueMap parameterToMultiValueMapJson(CollectionForm try { return parameterToMultiValueMap(collectionFormat, name, mapper.writeValueAsString(value)); } catch (JacksonException e) { - throw new RuntimeException(e); + throw exceptionProvider.jacksonException(e); } } @@ -457,10 +486,10 @@ public MultiValueMap parameterToMultiValueMapJson(CollectionForm try { values.add(mapper.writeValueAsString(o)); } catch (JacksonException e) { - throw new RuntimeException(e); + throw exceptionProvider.jacksonException(e); } } - return parameterToMultiValueMap(collectionFormat, name, "[" + StringUtils.collectionToDelimitedString(values, collectionFormat.separator) + "]"); + return parameterToMultiValueMap(collectionFormat, name, "[" + collectionFormat.collectionToString(values) + "]"); } /** @@ -801,7 +830,7 @@ protected void updateParamsForAuth(String[] authNames, MultiValueMap tokenSupplier; diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java index 0ccb935e9c56..1bb4de0f37bd 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java @@ -35,29 +35,48 @@ */ @JsonPropertyOrder({ Foo.JSON_PROPERTY_DT, + Foo.JSON_PROPERTY_NULLABLE_DT, Foo.JSON_PROPERTY_BINARY, + Foo.JSON_PROPERTY_NULLABLE_BINARY, Foo.JSON_PROPERTY_LIST_OF_DT, Foo.JSON_PROPERTY_LIST_MIN_INTEMS, + Foo.JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS, Foo.JSON_PROPERTY_REQUIRED_DT, - Foo.JSON_PROPERTY_NUMBER + Foo.JSON_PROPERTY_NUMBER, + Foo.JSON_PROPERTY_NULLABLE_NUMBER, + Foo.JSON_PROPERTY_COLOR, + Foo.JSON_PROPERTY_REQUIRED_COLOR, + Foo.JSON_PROPERTY_NULLABLE_COLOR }) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class Foo { public static final String JSON_PROPERTY_DT = "dt"; private java.time.@Nullable Instant dt; + public static final String JSON_PROPERTY_NULLABLE_DT = "nullableDt"; + + private java.time.@Nullable Instant nullableDt; + public static final String JSON_PROPERTY_BINARY = "binary"; private @Nullable File binary; + public static final String JSON_PROPERTY_NULLABLE_BINARY = "nullableBinary"; + + private @Nullable File nullableBinary; + public static final String JSON_PROPERTY_LIST_OF_DT = "listOfDt"; - private List listOfDt; + private @Nullable List listOfDt; public static final String JSON_PROPERTY_LIST_MIN_INTEMS = "listMinIntems"; - private List listMinIntems; + private @Nullable List listMinIntems; + + public static final String JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS = "nullableListMinIntems"; + + private @Nullable List nullableListMinIntems; public static final String JSON_PROPERTY_REQUIRED_DT = "requiredDt"; @@ -67,6 +86,22 @@ public class Foo { private java.math.@Nullable BigDecimal number; + public static final String JSON_PROPERTY_NULLABLE_NUMBER = "nullableNumber"; + + private java.math.@Nullable BigDecimal nullableNumber; + + public static final String JSON_PROPERTY_COLOR = "color"; + + private @Nullable String color = "red"; + + public static final String JSON_PROPERTY_REQUIRED_COLOR = "requiredColor"; + + private String requiredColor = "red"; + + public static final String JSON_PROPERTY_NULLABLE_COLOR = "nullableColor"; + + private @Nullable String nullableColor = "red"; + public Foo() { } @@ -95,6 +130,31 @@ public void setDt(java.time.@Nullable Instant dt) { this.dt = dt; } + public Foo nullableDt(java.time.@Nullable Instant nullableDt) { + + this.nullableDt = nullableDt; + return this; + } + + /** + * Get nullableDt + * @return nullableDt + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNullableDt() { + return java.util.Optional.ofNullable(nullableDt); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableDt(java.time.@Nullable Instant nullableDt) { + this.nullableDt = nullableDt; + } + public Foo binary(@Nullable File binary) { this.binary = binary; @@ -120,7 +180,32 @@ public void setBinary(@Nullable File binary) { this.binary = binary; } - public Foo listOfDt(List listOfDt) { + public Foo nullableBinary(@Nullable File nullableBinary) { + + this.nullableBinary = nullableBinary; + return this; + } + + /** + * Get nullableBinary + * @return nullableBinary + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_BINARY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNullableBinary() { + return java.util.Optional.ofNullable(nullableBinary); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_BINARY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableBinary(@Nullable File nullableBinary) { + this.nullableBinary = nullableBinary; + } + + public Foo listOfDt(@Nullable List listOfDt) { this.listOfDt = listOfDt; return this; @@ -149,11 +234,11 @@ public java.util.Optional> getListOfDt() { @JsonProperty(value = JSON_PROPERTY_LIST_OF_DT, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setListOfDt(List listOfDt) { + public void setListOfDt(@Nullable List listOfDt) { this.listOfDt = listOfDt; } - public Foo listMinIntems(List listMinIntems) { + public Foo listMinIntems(@Nullable List listMinIntems) { this.listMinIntems = listMinIntems; return this; @@ -182,10 +267,43 @@ public java.util.Optional> getListMinIntems() { @JsonProperty(value = JSON_PROPERTY_LIST_MIN_INTEMS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setListMinIntems(List listMinIntems) { + public void setListMinIntems(@Nullable List listMinIntems) { this.listMinIntems = listMinIntems; } + public Foo nullableListMinIntems(@Nullable List nullableListMinIntems) { + + this.nullableListMinIntems = nullableListMinIntems; + return this; + } + + public Foo addNullableListMinIntemsItem(java.time.Instant nullableListMinIntemsItem) { + if (this.nullableListMinIntems == null) { + this.nullableListMinIntems = new ArrayList<>(); + } + this.nullableListMinIntems.add(nullableListMinIntemsItem); + return this; + } + + /** + * Get nullableListMinIntems + * @return nullableListMinIntems + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional> getNullableListMinIntems() { + return java.util.Optional.ofNullable(nullableListMinIntems); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableListMinIntems(@Nullable List nullableListMinIntems) { + this.nullableListMinIntems = nullableListMinIntems; + } + public Foo requiredDt(java.time.Instant requiredDt) { this.requiredDt = requiredDt; @@ -236,6 +354,106 @@ public void setNumber(java.math.@Nullable BigDecimal number) { this.number = number; } + public Foo nullableNumber(java.math.@Nullable BigDecimal nullableNumber) { + + this.nullableNumber = nullableNumber; + return this; + } + + /** + * Get nullableNumber + * @return nullableNumber + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_NUMBER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNullableNumber() { + return java.util.Optional.ofNullable(nullableNumber); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_NUMBER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableNumber(java.math.@Nullable BigDecimal nullableNumber) { + this.nullableNumber = nullableNumber; + } + + public Foo color(@Nullable String color) { + + this.color = color; + return this; + } + + /** + * Get color + * @return color + */ + + @JsonProperty(value = JSON_PROPERTY_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getColor() { + return java.util.Optional.ofNullable(color); + } + + + @JsonProperty(value = JSON_PROPERTY_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setColor(@Nullable String color) { + this.color = color; + } + + public Foo requiredColor(String requiredColor) { + + this.requiredColor = requiredColor; + return this; + } + + /** + * Get requiredColor + * @return requiredColor + */ + + @JsonProperty(value = JSON_PROPERTY_REQUIRED_COLOR, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public String getRequiredColor() { + return requiredColor; + } + + + @JsonProperty(value = JSON_PROPERTY_REQUIRED_COLOR, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setRequiredColor(String requiredColor) { + this.requiredColor = requiredColor; + } + + public Foo nullableColor(@Nullable String nullableColor) { + + this.nullableColor = nullableColor; + return this; + } + + /** + * Get nullableColor + * @return nullableColor + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNullableColor() { + return java.util.Optional.ofNullable(nullableColor); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableColor(@Nullable String nullableColor) { + this.nullableColor = nullableColor; + } + @Override public boolean equals(Object o) { @@ -247,16 +465,23 @@ public boolean equals(Object o) { } Foo foo = (Foo) o; return Objects.equals(this.dt, foo.dt) && + Objects.equals(this.nullableDt, foo.nullableDt) && Objects.equals(this.binary, foo.binary) && + Objects.equals(this.nullableBinary, foo.nullableBinary) && Objects.equals(this.listOfDt, foo.listOfDt) && Objects.equals(this.listMinIntems, foo.listMinIntems) && + Objects.equals(this.nullableListMinIntems, foo.nullableListMinIntems) && Objects.equals(this.requiredDt, foo.requiredDt) && - Objects.equals(this.number, foo.number); + Objects.equals(this.number, foo.number) && + Objects.equals(this.nullableNumber, foo.nullableNumber) && + Objects.equals(this.color, foo.color) && + Objects.equals(this.requiredColor, foo.requiredColor) && + Objects.equals(this.nullableColor, foo.nullableColor); } @Override public int hashCode() { - return Objects.hash(dt, binary, listOfDt, listMinIntems, requiredDt, number); + return Objects.hash(dt, nullableDt, binary, nullableBinary, listOfDt, listMinIntems, nullableListMinIntems, requiredDt, number, nullableNumber, color, requiredColor, nullableColor); } @Override @@ -264,11 +489,18 @@ public String toString() { StringBuilder sb = new StringBuilder(); sb.append("class Foo {\n"); sb.append(" dt: ").append(toIndentedString(dt)).append("\n"); + sb.append(" nullableDt: ").append(toIndentedString(nullableDt)).append("\n"); sb.append(" binary: ").append(toIndentedString(binary)).append("\n"); + sb.append(" nullableBinary: ").append(toIndentedString(nullableBinary)).append("\n"); sb.append(" listOfDt: ").append(toIndentedString(listOfDt)).append("\n"); sb.append(" listMinIntems: ").append(toIndentedString(listMinIntems)).append("\n"); + sb.append(" nullableListMinIntems: ").append(toIndentedString(nullableListMinIntems)).append("\n"); sb.append(" requiredDt: ").append(toIndentedString(requiredDt)).append("\n"); sb.append(" number: ").append(toIndentedString(number)).append("\n"); + sb.append(" nullableNumber: ").append(toIndentedString(nullableNumber)).append("\n"); + sb.append(" color: ").append(toIndentedString(color)).append("\n"); + sb.append(" requiredColor: ").append(toIndentedString(requiredColor)).append("\n"); + sb.append(" nullableColor: ").append(toIndentedString(nullableColor)).append("\n"); sb.append("}"); return sb.toString(); } diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES index 56926e5b1c76..21d24a429a38 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES @@ -5,8 +5,13 @@ README.md api/openapi.yaml build.gradle build.sbt -docs/DefaultApi.md +docs/FileApi.md +docs/FileContent.md docs/Foo.md +docs/FooApi.md +docs/RequiredAndNullable.md +docs/RequiredAndNullableApi.md +docs/UploadApi.md git_push.sh gradle.properties gradle/wrapper/gradle-wrapper.jar @@ -24,12 +29,23 @@ src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java src/main/java/org/openapitools/client/ServerConfiguration.java src/main/java/org/openapitools/client/ServerVariable.java -src/main/java/org/openapitools/client/api/DefaultApi.java +src/main/java/org/openapitools/client/api/FileApi.java +src/main/java/org/openapitools/client/api/FooApi.java +src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java +src/main/java/org/openapitools/client/api/UploadApi.java src/main/java/org/openapitools/client/api/package-info.java src/main/java/org/openapitools/client/auth/ApiKeyAuth.java src/main/java/org/openapitools/client/auth/Authentication.java src/main/java/org/openapitools/client/auth/HttpBasicAuth.java src/main/java/org/openapitools/client/auth/HttpBearerAuth.java +src/main/java/org/openapitools/client/model/FileContent.java src/main/java/org/openapitools/client/model/Foo.java +src/main/java/org/openapitools/client/model/RequiredAndNullable.java src/main/java/org/openapitools/client/model/package-info.java src/main/java/org/openapitools/client/package-info.java +src/test/java/org/openapitools/client/api/FileApiTest.java +src/test/java/org/openapitools/client/api/FooApiTest.java +src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java +src/test/java/org/openapitools/client/api/UploadApiTest.java +src/test/java/org/openapitools/client/model/FileContentTest.java +src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION index 8fc8df61083a..32a8cfaceeb9 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION @@ -1 +1 @@ -7.25.0-SNAPSHOT +7.26.0-SNAPSHOT diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/README.md b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/README.md index 7facb2330822..1e89b7a864c5 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/README.md +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/README.md @@ -4,7 +4,7 @@ jspecify - API version: 1.0.0 -- Generator version: 7.25.0-SNAPSHOT +- Generator version: 7.26.0-SNAPSHOT test fully qualified name and jspecify @@ -84,20 +84,21 @@ Please follow the [installation](#installation) instruction and execute the foll import org.openapitools.client.*; import org.openapitools.client.auth.*; import org.openapitools.client.model.*; -import org.openapitools.client.api.DefaultApi; +import org.openapitools.client.api.FileApi; -public class DefaultApiExample { +public class FileApiExample { public static void main(String[] args) { ApiClient defaultClient = Configuration.getDefaultApiClient(); defaultClient.setBasePath("http://localhost"); - DefaultApi apiInstance = new DefaultApi(defaultClient); + FileApi apiInstance = new FileApi(defaultClient); String id = "id_example"; // String | try { - apiInstance.fileIdGet(id); + FileContent result = apiInstance.fileIdGet(id); + System.out.println(result); } catch (ApiException e) { - System.err.println("Exception when calling DefaultApi#fileIdGet"); + System.err.println("Exception when calling FileApi#fileIdGet"); System.err.println("Status code: " + e.getCode()); System.err.println("Reason: " + e.getResponseBody()); System.err.println("Response headers: " + e.getResponseHeaders()); @@ -114,14 +115,18 @@ All URIs are relative to *http://localhost* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*DefaultApi* | [**fileIdGet**](docs/DefaultApi.md#fileIdGet) | **GET** /file/{id} | -*DefaultApi* | [**fooDtParamGet**](docs/DefaultApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | -*DefaultApi* | [**uploadPost**](docs/DefaultApi.md#uploadPost) | **POST** /upload | +*FileApi* | [**fileIdGet**](docs/FileApi.md#fileIdGet) | **GET** /file/{id} | +*FooApi* | [**fooDtParamGet**](docs/FooApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | +*RequiredAndNullableApi* | [**requiredAndNullablePost**](docs/RequiredAndNullableApi.md#requiredAndNullablePost) | **POST** /requiredAndNullable | +*UploadApi* | [**uploadFilesPost**](docs/UploadApi.md#uploadFilesPost) | **POST** /uploadFiles | +*UploadApi* | [**uploadPost**](docs/UploadApi.md#uploadPost) | **POST** /upload | ## Documentation for Models + - [FileContent](docs/FileContent.md) - [Foo](docs/Foo.md) + - [RequiredAndNullable](docs/RequiredAndNullable.md) diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml index 14c4c1ed2afc..15c1f4176a50 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml @@ -5,6 +5,15 @@ info: version: 1.0.0 servers: - url: / +tags: +- description: requiredAndNullable + name: requiredAndNullable +- description: foo + name: foo +- description: upload + name: upload +- description: file + name: file paths: /foo/{dtParam}: get: @@ -33,6 +42,14 @@ paths: format: date-time type: string style: form + - explode: true + in: query + name: color + required: false + schema: + default: red + type: string + style: form responses: default: content: @@ -40,6 +57,29 @@ paths: schema: $ref: "#/components/schemas/Foo" description: response + tags: + - foo + x-accepts: + - application/json + /requiredAndNullable: + post: + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/RequiredAndNullable" + description: bodyWithRequiredAndNullableAttributes + required: true + responses: + default: + content: + application/json: + schema: + $ref: "#/components/schemas/RequiredAndNullable" + description: response + tags: + - requiredAndNullable + x-content-type: application/json x-accepts: - application/json /upload: @@ -53,6 +93,24 @@ paths: responses: default: description: ok + tags: + - upload + x-content-type: multipart/form-data + x-accepts: + - application/json + /uploadFiles: + post: + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/_uploadFiles_post_request" + description: file + responses: + default: + description: ok + tags: + - upload x-content-type: multipart/form-data x-accepts: - application/json @@ -68,7 +126,13 @@ paths: style: simple responses: "200": + content: + application/json: + schema: + $ref: "#/components/schemas/FileContent" description: ok + tags: + - file x-accepts: - application/json components: @@ -76,22 +140,39 @@ components: Foo: example: dt: 2000-01-23T04:56:07.000+00:00 + nullableDt: 2000-01-23T04:56:07.000+00:00 binary: "" + nullableBinary: "" listOfDt: - 2000-01-23T04:56:07.000+00:00 - 2000-01-23T04:56:07.000+00:00 listMinIntems: - 2000-01-23T04:56:07.000+00:00 - 2000-01-23T04:56:07.000+00:00 + nullableListMinIntems: + - 2000-01-23T04:56:07.000+00:00 + - 2000-01-23T04:56:07.000+00:00 requiredDt: 2000-01-23T04:56:07.000+00:00 number: 0.8008281904610115 + nullableNumber: 6.027456183070403 + color: red + requiredColor: red + nullableColor: red properties: dt: format: date-time type: string + nullableDt: + format: date-time + nullable: true + type: string binary: format: binary type: string + nullableBinary: + format: binary + nullable: true + type: string listOfDt: items: format: date-time @@ -103,17 +184,102 @@ components: type: string minItems: 1 type: array + nullableListMinIntems: + items: + format: date-time + type: string + minItems: 1 + nullable: true + type: array requiredDt: format: date-time type: string number: type: number + nullableNumber: + nullable: true + type: number + color: + default: red + type: string + requiredColor: + default: red + type: string + nullableColor: + default: red + nullable: true + type: string required: + - requiredColor - requiredDt + RequiredAndNullable: + example: + str: str + file: "" + color: red + onlyRequired: onlyRequired + list: + - list + - list + properties: + str: + nullable: true + type: string + file: + format: binary + nullable: true + type: string + color: + default: red + nullable: true + type: string + onlyRequired: + type: string + list: + items: + type: string + nullable: true + type: array + required: + - color + - file + - list + - onlyRequired + - str + type: object + FileContent: + example: + name: name + size: 0 + virusScan: clean + properties: + name: + readOnly: true + type: string + size: + readOnly: true + type: integer + virusScan: + enum: + - clean + - detected + readOnly: true + type: string + required: + - name + type: object _upload_post_request: properties: file: format: binary type: string type: object + _uploadFiles_post_request: + properties: + file: + items: + format: binary + type: string + type: array + type: object diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/build.gradle b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/build.gradle index 7af3c77fccba..464e991d8eec 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/build.gradle +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/build.gradle @@ -78,8 +78,10 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'java' apply plugin: 'maven-publish' - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } publishing { publications { @@ -97,9 +99,9 @@ if(hasProperty('target') && target == 'android') { } ext { - jackson_version = "3.1.0" + jackson_version = "3.1.5" jackson_annotations_version = "2.21" - spring_web_version = "7.0.5" + spring_web_version = "7.0.8" jakarta_annotation_version = "3.0.0" bean_validation_version = "3.1.1" jodatime_version = "2.9.9" diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md index d03d21cd097d..9237adf1033e 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md @@ -8,11 +8,18 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| |**dt** | **java.time.Instant** | | [optional] | +|**nullableDt** | **java.time.Instant** | | [optional] | |**binary** | **File** | | [optional] | +|**nullableBinary** | **File** | | [optional] | |**listOfDt** | **List<java.time.Instant>** | | [optional] | |**listMinIntems** | **List<java.time.Instant>** | | [optional] | +|**nullableListMinIntems** | **List<java.time.Instant>** | | [optional] | |**requiredDt** | **java.time.Instant** | | | |**number** | **java.math.BigDecimal** | | [optional] | +|**nullableNumber** | **java.math.BigDecimal** | | [optional] | +|**color** | **String** | | [optional] | +|**requiredColor** | **String** | | | +|**nullableColor** | **String** | | [optional] | diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/git_push.sh b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/git_push.sh index f53a75d4fabe..a35991cd51a1 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/git_push.sh +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/git_push.sh @@ -8,24 +8,24 @@ git_repo_id=$2 release_note=$3 git_host=$4 -if [ "$git_host" = "" ]; then +if [ -z "${git_host}" ]; then git_host="github.com" - echo "[INFO] No command line input provided. Set \$git_host to $git_host" + echo "[INFO] No command line input provided. Set \${git_host} to ${git_host}" fi -if [ "$git_user_id" = "" ]; then +if [ -z "${git_user_id}" ]; then git_user_id="GIT_USER_ID" - echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" + echo "[INFO] No command line input provided. Set \${git_user_id} to ${git_user_id}" fi -if [ "$git_repo_id" = "" ]; then +if [ -z "${git_repo_id}" ]; then git_repo_id="GIT_REPO_ID" - echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" + echo "[INFO] No command line input provided. Set \${git_repo_id} to ${git_repo_id}" fi -if [ "$release_note" = "" ]; then +if [ -z "${release_note}" ]; then release_note="Minor update" - echo "[INFO] No command line input provided. Set \$release_note to $release_note" + echo "[INFO] No command line input provided. Set \${release_note} to ${release_note}" fi # Initialize the local directory as a Git repository @@ -35,19 +35,16 @@ git init git add . # Commits the tracked changes and prepares them to be pushed to a remote repository. -git commit -m "$release_note" +git commit -m "${release_note}" # Sets the new remote -git_remote=$(git remote) -if [ "$git_remote" = "" ]; then # git remote not defined - - if [ "$GIT_TOKEN" = "" ]; then - echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." - git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git +if [ -z "$(git remote)" ]; then # git remote not defined + if [ -z "${GIT_TOKEN:-}" ]; then + echo "[INFO] \${GIT_TOKEN} (environment variable) is not set. Using the git credential in your environment." + git remote add origin "https://${git_host}/${git_user_id}/${git_repo_id}.git" else - git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git + git remote add origin "https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git" fi - fi git pull origin master diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties index b82aa23a4f05..4f5eb9dcc0ef 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/pom.xml b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/pom.xml index dd9c6576068d..15b534e3f93b 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/pom.xml +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/pom.xml @@ -266,8 +266,8 @@ UTF-8 - 7.0.5 - 3.1.0 + 7.0.8 + 3.1.5 3.0.0 2.21 diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java index 7ec7c10a9ab6..a0c89a16b3c4 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java @@ -70,7 +70,7 @@ import org.openapitools.client.auth.Authentication; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class ApiClient extends JavaTimeFormatter { public enum CollectionFormat { CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null); diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/BaseApi.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/BaseApi.java index 2c83dcf27a12..6762879f0bdf 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/BaseApi.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/BaseApi.java @@ -18,7 +18,7 @@ import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public abstract class BaseApi { protected ApiClient apiClient; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java index 96463ebdee2f..a40073563104 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/JavaTimeFormatter.java @@ -20,7 +20,7 @@ * Class that add parsing/formatting support for Java 8+ {@code OffsetDateTime} class. * It's generated for java clients when {@code AbstractJavaCodegen#dateLibrary} specified as {@code java8}. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class JavaTimeFormatter { private DateTimeFormatter offsetDateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java index 07bbdd002992..c8020e56ec5a 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339DateFormat.java @@ -21,7 +21,7 @@ import java.util.TimeZone; import tools.jackson.databind.util.StdDateFormat; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class RFC3339DateFormat extends DateFormat { private static final long serialVersionUID = 1L; private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC"); diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java index 03022c373c6f..b7cc227ded22 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java @@ -28,7 +28,7 @@ import tools.jackson.databind.cfg.DateTimeFeature; import tools.jackson.databind.ext.javatime.deser.InstantDeserializer; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class RFC3339InstantDeserializer extends InstantDeserializer { private static final long serialVersionUID = 1L; private final static boolean DEFAULT_NORMALIZE_ZONE_ID = DateTimeFeature.NORMALIZE_DESERIALIZED_ZONE_ID.enabledByDefault(); diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java index aa0c37aa7012..95b16b0a9795 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java @@ -18,7 +18,7 @@ import tools.jackson.databind.module.SimpleModule; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class RFC3339JavaTimeModule extends SimpleModule { private static final long serialVersionUID = 1L; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java index 05a6de2af25d..482a1895de98 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java @@ -18,7 +18,7 @@ /** * Representing a Server configuration. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class ServerConfiguration { public String URL; public String description; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java index 7f984316bde1..6b88c89af501 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java @@ -18,7 +18,7 @@ /** * Representing a Server Variable for server URL template substitution. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class ServerVariable { public String description; public String defaultValue; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java index b79ac2ca2224..4ebede4c15db 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java @@ -16,7 +16,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java index 6c10a7b585ae..3ebf4d8ef554 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java @@ -16,7 +16,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public interface Authentication { /** * Apply authentication settings to header and / or query parameters. diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java index 42afe54f2ff5..bad9e94fb044 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java @@ -19,7 +19,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class HttpBasicAuth implements Authentication { private String username; private String password; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java index 21be5e164fc5..b476d4955edf 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java @@ -18,7 +18,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class HttpBearerAuth implements Authentication { private final String scheme; private Supplier tokenSupplier; diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java index 0ccb935e9c56..1bb4de0f37bd 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java @@ -35,29 +35,48 @@ */ @JsonPropertyOrder({ Foo.JSON_PROPERTY_DT, + Foo.JSON_PROPERTY_NULLABLE_DT, Foo.JSON_PROPERTY_BINARY, + Foo.JSON_PROPERTY_NULLABLE_BINARY, Foo.JSON_PROPERTY_LIST_OF_DT, Foo.JSON_PROPERTY_LIST_MIN_INTEMS, + Foo.JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS, Foo.JSON_PROPERTY_REQUIRED_DT, - Foo.JSON_PROPERTY_NUMBER + Foo.JSON_PROPERTY_NUMBER, + Foo.JSON_PROPERTY_NULLABLE_NUMBER, + Foo.JSON_PROPERTY_COLOR, + Foo.JSON_PROPERTY_REQUIRED_COLOR, + Foo.JSON_PROPERTY_NULLABLE_COLOR }) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class Foo { public static final String JSON_PROPERTY_DT = "dt"; private java.time.@Nullable Instant dt; + public static final String JSON_PROPERTY_NULLABLE_DT = "nullableDt"; + + private java.time.@Nullable Instant nullableDt; + public static final String JSON_PROPERTY_BINARY = "binary"; private @Nullable File binary; + public static final String JSON_PROPERTY_NULLABLE_BINARY = "nullableBinary"; + + private @Nullable File nullableBinary; + public static final String JSON_PROPERTY_LIST_OF_DT = "listOfDt"; - private List listOfDt; + private @Nullable List listOfDt; public static final String JSON_PROPERTY_LIST_MIN_INTEMS = "listMinIntems"; - private List listMinIntems; + private @Nullable List listMinIntems; + + public static final String JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS = "nullableListMinIntems"; + + private @Nullable List nullableListMinIntems; public static final String JSON_PROPERTY_REQUIRED_DT = "requiredDt"; @@ -67,6 +86,22 @@ public class Foo { private java.math.@Nullable BigDecimal number; + public static final String JSON_PROPERTY_NULLABLE_NUMBER = "nullableNumber"; + + private java.math.@Nullable BigDecimal nullableNumber; + + public static final String JSON_PROPERTY_COLOR = "color"; + + private @Nullable String color = "red"; + + public static final String JSON_PROPERTY_REQUIRED_COLOR = "requiredColor"; + + private String requiredColor = "red"; + + public static final String JSON_PROPERTY_NULLABLE_COLOR = "nullableColor"; + + private @Nullable String nullableColor = "red"; + public Foo() { } @@ -95,6 +130,31 @@ public void setDt(java.time.@Nullable Instant dt) { this.dt = dt; } + public Foo nullableDt(java.time.@Nullable Instant nullableDt) { + + this.nullableDt = nullableDt; + return this; + } + + /** + * Get nullableDt + * @return nullableDt + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNullableDt() { + return java.util.Optional.ofNullable(nullableDt); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableDt(java.time.@Nullable Instant nullableDt) { + this.nullableDt = nullableDt; + } + public Foo binary(@Nullable File binary) { this.binary = binary; @@ -120,7 +180,32 @@ public void setBinary(@Nullable File binary) { this.binary = binary; } - public Foo listOfDt(List listOfDt) { + public Foo nullableBinary(@Nullable File nullableBinary) { + + this.nullableBinary = nullableBinary; + return this; + } + + /** + * Get nullableBinary + * @return nullableBinary + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_BINARY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNullableBinary() { + return java.util.Optional.ofNullable(nullableBinary); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_BINARY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableBinary(@Nullable File nullableBinary) { + this.nullableBinary = nullableBinary; + } + + public Foo listOfDt(@Nullable List listOfDt) { this.listOfDt = listOfDt; return this; @@ -149,11 +234,11 @@ public java.util.Optional> getListOfDt() { @JsonProperty(value = JSON_PROPERTY_LIST_OF_DT, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setListOfDt(List listOfDt) { + public void setListOfDt(@Nullable List listOfDt) { this.listOfDt = listOfDt; } - public Foo listMinIntems(List listMinIntems) { + public Foo listMinIntems(@Nullable List listMinIntems) { this.listMinIntems = listMinIntems; return this; @@ -182,10 +267,43 @@ public java.util.Optional> getListMinIntems() { @JsonProperty(value = JSON_PROPERTY_LIST_MIN_INTEMS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setListMinIntems(List listMinIntems) { + public void setListMinIntems(@Nullable List listMinIntems) { this.listMinIntems = listMinIntems; } + public Foo nullableListMinIntems(@Nullable List nullableListMinIntems) { + + this.nullableListMinIntems = nullableListMinIntems; + return this; + } + + public Foo addNullableListMinIntemsItem(java.time.Instant nullableListMinIntemsItem) { + if (this.nullableListMinIntems == null) { + this.nullableListMinIntems = new ArrayList<>(); + } + this.nullableListMinIntems.add(nullableListMinIntemsItem); + return this; + } + + /** + * Get nullableListMinIntems + * @return nullableListMinIntems + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional> getNullableListMinIntems() { + return java.util.Optional.ofNullable(nullableListMinIntems); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableListMinIntems(@Nullable List nullableListMinIntems) { + this.nullableListMinIntems = nullableListMinIntems; + } + public Foo requiredDt(java.time.Instant requiredDt) { this.requiredDt = requiredDt; @@ -236,6 +354,106 @@ public void setNumber(java.math.@Nullable BigDecimal number) { this.number = number; } + public Foo nullableNumber(java.math.@Nullable BigDecimal nullableNumber) { + + this.nullableNumber = nullableNumber; + return this; + } + + /** + * Get nullableNumber + * @return nullableNumber + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_NUMBER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNullableNumber() { + return java.util.Optional.ofNullable(nullableNumber); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_NUMBER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableNumber(java.math.@Nullable BigDecimal nullableNumber) { + this.nullableNumber = nullableNumber; + } + + public Foo color(@Nullable String color) { + + this.color = color; + return this; + } + + /** + * Get color + * @return color + */ + + @JsonProperty(value = JSON_PROPERTY_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getColor() { + return java.util.Optional.ofNullable(color); + } + + + @JsonProperty(value = JSON_PROPERTY_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setColor(@Nullable String color) { + this.color = color; + } + + public Foo requiredColor(String requiredColor) { + + this.requiredColor = requiredColor; + return this; + } + + /** + * Get requiredColor + * @return requiredColor + */ + + @JsonProperty(value = JSON_PROPERTY_REQUIRED_COLOR, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public String getRequiredColor() { + return requiredColor; + } + + + @JsonProperty(value = JSON_PROPERTY_REQUIRED_COLOR, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setRequiredColor(String requiredColor) { + this.requiredColor = requiredColor; + } + + public Foo nullableColor(@Nullable String nullableColor) { + + this.nullableColor = nullableColor; + return this; + } + + /** + * Get nullableColor + * @return nullableColor + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNullableColor() { + return java.util.Optional.ofNullable(nullableColor); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableColor(@Nullable String nullableColor) { + this.nullableColor = nullableColor; + } + @Override public boolean equals(Object o) { @@ -247,16 +465,23 @@ public boolean equals(Object o) { } Foo foo = (Foo) o; return Objects.equals(this.dt, foo.dt) && + Objects.equals(this.nullableDt, foo.nullableDt) && Objects.equals(this.binary, foo.binary) && + Objects.equals(this.nullableBinary, foo.nullableBinary) && Objects.equals(this.listOfDt, foo.listOfDt) && Objects.equals(this.listMinIntems, foo.listMinIntems) && + Objects.equals(this.nullableListMinIntems, foo.nullableListMinIntems) && Objects.equals(this.requiredDt, foo.requiredDt) && - Objects.equals(this.number, foo.number); + Objects.equals(this.number, foo.number) && + Objects.equals(this.nullableNumber, foo.nullableNumber) && + Objects.equals(this.color, foo.color) && + Objects.equals(this.requiredColor, foo.requiredColor) && + Objects.equals(this.nullableColor, foo.nullableColor); } @Override public int hashCode() { - return Objects.hash(dt, binary, listOfDt, listMinIntems, requiredDt, number); + return Objects.hash(dt, nullableDt, binary, nullableBinary, listOfDt, listMinIntems, nullableListMinIntems, requiredDt, number, nullableNumber, color, requiredColor, nullableColor); } @Override @@ -264,11 +489,18 @@ public String toString() { StringBuilder sb = new StringBuilder(); sb.append("class Foo {\n"); sb.append(" dt: ").append(toIndentedString(dt)).append("\n"); + sb.append(" nullableDt: ").append(toIndentedString(nullableDt)).append("\n"); sb.append(" binary: ").append(toIndentedString(binary)).append("\n"); + sb.append(" nullableBinary: ").append(toIndentedString(nullableBinary)).append("\n"); sb.append(" listOfDt: ").append(toIndentedString(listOfDt)).append("\n"); sb.append(" listMinIntems: ").append(toIndentedString(listMinIntems)).append("\n"); + sb.append(" nullableListMinIntems: ").append(toIndentedString(nullableListMinIntems)).append("\n"); sb.append(" requiredDt: ").append(toIndentedString(requiredDt)).append("\n"); sb.append(" number: ").append(toIndentedString(number)).append("\n"); + sb.append(" nullableNumber: ").append(toIndentedString(nullableNumber)).append("\n"); + sb.append(" color: ").append(toIndentedString(color)).append("\n"); + sb.append(" requiredColor: ").append(toIndentedString(requiredColor)).append("\n"); + sb.append(" nullableColor: ").append(toIndentedString(nullableColor)).append("\n"); sb.append("}"); return sb.toString(); } diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES index d59cb3fdbb35..d7667aca8ee0 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES @@ -5,8 +5,13 @@ README.md api/openapi.yaml build.gradle build.sbt -docs/DefaultApi.md +docs/FileApi.md +docs/FileContent.md docs/Foo.md +docs/FooApi.md +docs/RequiredAndNullable.md +docs/RequiredAndNullableApi.md +docs/UploadApi.md git_push.sh gradle.properties gradle/wrapper/gradle-wrapper.jar @@ -17,6 +22,7 @@ pom.xml settings.gradle src/main/AndroidManifest.xml src/main/java/org/openapitools/client/ApiClient.java +src/main/java/org/openapitools/client/ExceptionProvider.java src/main/java/org/openapitools/client/JavaTimeFormatter.java src/main/java/org/openapitools/client/RFC3339DateFormat.java src/main/java/org/openapitools/client/RFC3339InstantDeserializer.java @@ -24,12 +30,23 @@ src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java src/main/java/org/openapitools/client/ServerConfiguration.java src/main/java/org/openapitools/client/ServerVariable.java src/main/java/org/openapitools/client/StringUtil.java -src/main/java/org/openapitools/client/api/DefaultApi.java +src/main/java/org/openapitools/client/api/FileApi.java +src/main/java/org/openapitools/client/api/FooApi.java +src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java +src/main/java/org/openapitools/client/api/UploadApi.java src/main/java/org/openapitools/client/api/package-info.java src/main/java/org/openapitools/client/auth/ApiKeyAuth.java src/main/java/org/openapitools/client/auth/Authentication.java src/main/java/org/openapitools/client/auth/HttpBasicAuth.java src/main/java/org/openapitools/client/auth/HttpBearerAuth.java +src/main/java/org/openapitools/client/model/FileContent.java src/main/java/org/openapitools/client/model/Foo.java +src/main/java/org/openapitools/client/model/RequiredAndNullable.java src/main/java/org/openapitools/client/model/package-info.java src/main/java/org/openapitools/client/package-info.java +src/test/java/org/openapitools/client/api/FileApiTest.java +src/test/java/org/openapitools/client/api/FooApiTest.java +src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java +src/test/java/org/openapitools/client/api/UploadApiTest.java +src/test/java/org/openapitools/client/model/FileContentTest.java +src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION index 8fc8df61083a..32a8cfaceeb9 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/VERSION @@ -1 +1 @@ -7.25.0-SNAPSHOT +7.26.0-SNAPSHOT diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/README.md b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/README.md index ef6c39510b2d..3cf40e29d9ed 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/README.md +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/README.md @@ -4,7 +4,7 @@ jspecify - API version: 1.0.0 -- Generator version: 7.25.0-SNAPSHOT +- Generator version: 7.26.0-SNAPSHOT test fully qualified name and jspecify @@ -84,20 +84,21 @@ Please follow the [installation](#installation) instruction and execute the foll import org.openapitools.client.*; import org.openapitools.client.auth.*; import org.openapitools.client.model.*; -import org.openapitools.client.api.DefaultApi; +import org.openapitools.client.api.FileApi; -public class DefaultApiExample { +public class FileApiExample { public static void main(String[] args) { ApiClient defaultClient = Configuration.getDefaultApiClient(); defaultClient.setBasePath("http://localhost"); - DefaultApi apiInstance = new DefaultApi(defaultClient); + FileApi apiInstance = new FileApi(defaultClient); String id = "id_example"; // String | try { - apiInstance.fileIdGet(id); + FileContent result = apiInstance.fileIdGet(id); + System.out.println(result); } catch (ApiException e) { - System.err.println("Exception when calling DefaultApi#fileIdGet"); + System.err.println("Exception when calling FileApi#fileIdGet"); System.err.println("Status code: " + e.getCode()); System.err.println("Reason: " + e.getResponseBody()); System.err.println("Response headers: " + e.getResponseHeaders()); @@ -114,14 +115,18 @@ All URIs are relative to *http://localhost* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*DefaultApi* | [**fileIdGet**](docs/DefaultApi.md#fileIdGet) | **GET** /file/{id} | -*DefaultApi* | [**fooDtParamGet**](docs/DefaultApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | -*DefaultApi* | [**uploadPost**](docs/DefaultApi.md#uploadPost) | **POST** /upload | +*FileApi* | [**fileIdGet**](docs/FileApi.md#fileIdGet) | **GET** /file/{id} | +*FooApi* | [**fooDtParamGet**](docs/FooApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | +*RequiredAndNullableApi* | [**requiredAndNullablePost**](docs/RequiredAndNullableApi.md#requiredAndNullablePost) | **POST** /requiredAndNullable | +*UploadApi* | [**uploadFilesPost**](docs/UploadApi.md#uploadFilesPost) | **POST** /uploadFiles | +*UploadApi* | [**uploadPost**](docs/UploadApi.md#uploadPost) | **POST** /upload | ## Documentation for Models + - [FileContent](docs/FileContent.md) - [Foo](docs/Foo.md) + - [RequiredAndNullable](docs/RequiredAndNullable.md) diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml index 14c4c1ed2afc..15c1f4176a50 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/api/openapi.yaml @@ -5,6 +5,15 @@ info: version: 1.0.0 servers: - url: / +tags: +- description: requiredAndNullable + name: requiredAndNullable +- description: foo + name: foo +- description: upload + name: upload +- description: file + name: file paths: /foo/{dtParam}: get: @@ -33,6 +42,14 @@ paths: format: date-time type: string style: form + - explode: true + in: query + name: color + required: false + schema: + default: red + type: string + style: form responses: default: content: @@ -40,6 +57,29 @@ paths: schema: $ref: "#/components/schemas/Foo" description: response + tags: + - foo + x-accepts: + - application/json + /requiredAndNullable: + post: + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/RequiredAndNullable" + description: bodyWithRequiredAndNullableAttributes + required: true + responses: + default: + content: + application/json: + schema: + $ref: "#/components/schemas/RequiredAndNullable" + description: response + tags: + - requiredAndNullable + x-content-type: application/json x-accepts: - application/json /upload: @@ -53,6 +93,24 @@ paths: responses: default: description: ok + tags: + - upload + x-content-type: multipart/form-data + x-accepts: + - application/json + /uploadFiles: + post: + requestBody: + content: + multipart/form-data: + schema: + $ref: "#/components/schemas/_uploadFiles_post_request" + description: file + responses: + default: + description: ok + tags: + - upload x-content-type: multipart/form-data x-accepts: - application/json @@ -68,7 +126,13 @@ paths: style: simple responses: "200": + content: + application/json: + schema: + $ref: "#/components/schemas/FileContent" description: ok + tags: + - file x-accepts: - application/json components: @@ -76,22 +140,39 @@ components: Foo: example: dt: 2000-01-23T04:56:07.000+00:00 + nullableDt: 2000-01-23T04:56:07.000+00:00 binary: "" + nullableBinary: "" listOfDt: - 2000-01-23T04:56:07.000+00:00 - 2000-01-23T04:56:07.000+00:00 listMinIntems: - 2000-01-23T04:56:07.000+00:00 - 2000-01-23T04:56:07.000+00:00 + nullableListMinIntems: + - 2000-01-23T04:56:07.000+00:00 + - 2000-01-23T04:56:07.000+00:00 requiredDt: 2000-01-23T04:56:07.000+00:00 number: 0.8008281904610115 + nullableNumber: 6.027456183070403 + color: red + requiredColor: red + nullableColor: red properties: dt: format: date-time type: string + nullableDt: + format: date-time + nullable: true + type: string binary: format: binary type: string + nullableBinary: + format: binary + nullable: true + type: string listOfDt: items: format: date-time @@ -103,17 +184,102 @@ components: type: string minItems: 1 type: array + nullableListMinIntems: + items: + format: date-time + type: string + minItems: 1 + nullable: true + type: array requiredDt: format: date-time type: string number: type: number + nullableNumber: + nullable: true + type: number + color: + default: red + type: string + requiredColor: + default: red + type: string + nullableColor: + default: red + nullable: true + type: string required: + - requiredColor - requiredDt + RequiredAndNullable: + example: + str: str + file: "" + color: red + onlyRequired: onlyRequired + list: + - list + - list + properties: + str: + nullable: true + type: string + file: + format: binary + nullable: true + type: string + color: + default: red + nullable: true + type: string + onlyRequired: + type: string + list: + items: + type: string + nullable: true + type: array + required: + - color + - file + - list + - onlyRequired + - str + type: object + FileContent: + example: + name: name + size: 0 + virusScan: clean + properties: + name: + readOnly: true + type: string + size: + readOnly: true + type: integer + virusScan: + enum: + - clean + - detected + readOnly: true + type: string + required: + - name + type: object _upload_post_request: properties: file: format: binary type: string type: object + _uploadFiles_post_request: + properties: + file: + items: + format: binary + type: string + type: array + type: object diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle index 2ef1644e882e..1f1cf3d89f6d 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/build.gradle @@ -78,8 +78,10 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'java' apply plugin: 'maven-publish' - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } publishing { publications { @@ -117,7 +119,7 @@ ext { beanvalidation_version = "3.0.2" reactor_version = "3.5.12" reactor_netty_version = "1.2.8" - jackson_version = "3.1.0" + jackson_version = "3.1.5" jackson_annotations_version = "2.21" junit_version = "5.10.2" } diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md index d03d21cd097d..9237adf1033e 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/Foo.md @@ -8,11 +8,18 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| |**dt** | **java.time.Instant** | | [optional] | +|**nullableDt** | **java.time.Instant** | | [optional] | |**binary** | **File** | | [optional] | +|**nullableBinary** | **File** | | [optional] | |**listOfDt** | **List<java.time.Instant>** | | [optional] | |**listMinIntems** | **List<java.time.Instant>** | | [optional] | +|**nullableListMinIntems** | **List<java.time.Instant>** | | [optional] | |**requiredDt** | **java.time.Instant** | | | |**number** | **java.math.BigDecimal** | | [optional] | +|**nullableNumber** | **java.math.BigDecimal** | | [optional] | +|**color** | **String** | | [optional] | +|**requiredColor** | **String** | | | +|**nullableColor** | **String** | | [optional] | diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh index f53a75d4fabe..a35991cd51a1 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/git_push.sh @@ -8,24 +8,24 @@ git_repo_id=$2 release_note=$3 git_host=$4 -if [ "$git_host" = "" ]; then +if [ -z "${git_host}" ]; then git_host="github.com" - echo "[INFO] No command line input provided. Set \$git_host to $git_host" + echo "[INFO] No command line input provided. Set \${git_host} to ${git_host}" fi -if [ "$git_user_id" = "" ]; then +if [ -z "${git_user_id}" ]; then git_user_id="GIT_USER_ID" - echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" + echo "[INFO] No command line input provided. Set \${git_user_id} to ${git_user_id}" fi -if [ "$git_repo_id" = "" ]; then +if [ -z "${git_repo_id}" ]; then git_repo_id="GIT_REPO_ID" - echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" + echo "[INFO] No command line input provided. Set \${git_repo_id} to ${git_repo_id}" fi -if [ "$release_note" = "" ]; then +if [ -z "${release_note}" ]; then release_note="Minor update" - echo "[INFO] No command line input provided. Set \$release_note to $release_note" + echo "[INFO] No command line input provided. Set \${release_note} to ${release_note}" fi # Initialize the local directory as a Git repository @@ -35,19 +35,16 @@ git init git add . # Commits the tracked changes and prepares them to be pushed to a remote repository. -git commit -m "$release_note" +git commit -m "${release_note}" # Sets the new remote -git_remote=$(git remote) -if [ "$git_remote" = "" ]; then # git remote not defined - - if [ "$GIT_TOKEN" = "" ]; then - echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." - git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git +if [ -z "$(git remote)" ]; then # git remote not defined + if [ -z "${GIT_TOKEN:-}" ]; then + echo "[INFO] \${GIT_TOKEN} (environment variable) is not set. Using the git credential in your environment." + git remote add origin "https://${git_host}/${git_user_id}/${git_repo_id}.git" else - git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git + git remote add origin "https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git" fi - fi git pull origin master diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties index b82aa23a4f05..4f5eb9dcc0ef 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml index 30ddebc0edfe..138bd95b11bf 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/pom.xml @@ -112,7 +112,7 @@ UTF-8 - 3.1.0 + 3.1.5 4.0.3 2.1.1 3.5.12 diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java index 3f853999cc02..5362e6398083 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ApiClient.java @@ -79,17 +79,17 @@ import org.openapitools.client.auth.HttpBearerAuth; import org.openapitools.client.auth.ApiKeyAuth; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class ApiClient extends JavaTimeFormatter { public enum CollectionFormat { CSV(","), TSV("\t"), SSV(" "), PIPES("|"), MULTI(null); - protected final String separator; + private final String separator; CollectionFormat(String separator) { this.separator = separator; } - protected String collectionToString(Collection collection) { + public String collectionToString(Collection collection) { return StringUtils.collectionToDelimitedString(collection, separator); } } @@ -107,6 +107,13 @@ protected String collectionToString(Collection collection) { protected Map authentications; + /** + * The {@link ExceptionProvider} used to create exceptions thrown by this client. + * Defaults to {@link ExceptionProvider#DEFAULT}. Can be replaced to customize the exceptions + * thrown by this client by calling {@link #setExceptionProvider(ExceptionProvider)}. + */ + protected ExceptionProvider exceptionProvider = ExceptionProvider.DEFAULT; + public ApiClient() { this.dateFormat = createDefaultDateFormat(); @@ -141,6 +148,9 @@ public static DateFormat createDefaultDateFormat() { } public static JsonMapper createDefaultMapper(@Nullable DateFormat dateFormat) { + if (null == dateFormat) { + dateFormat = createDefaultDateFormat(); + } return JsonMapper.builder() .defaultDateFormat(dateFormat) .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) @@ -222,6 +232,25 @@ public Map getAuthentications() { return authentications; } + /** + * Get the current {@link ExceptionProvider}. + * @return the exception provider + */ + public ExceptionProvider getExceptionProvider() { + return exceptionProvider; + } + + /** + * Set a custom {@link ExceptionProvider} to control which exception types are thrown + * by this client. + * @param exceptionProvider the exception provider + * @return this client instance + */ + public ApiClient setExceptionProvider(ExceptionProvider exceptionProvider) { + this.exceptionProvider = exceptionProvider; + return this; + } + /** * Get authentication for the given name. * @@ -243,7 +272,7 @@ public void setBearerToken(String bearerToken) { return; } } - throw new RuntimeException("No Bearer authentication configured!"); + throw exceptionProvider.bearerAuthException(); } /** @@ -257,7 +286,7 @@ public void setUsername(String username) { return; } } - throw new RuntimeException("No HTTP basic authentication configured!"); + throw exceptionProvider.httpBasicAuthException(); } /** @@ -271,7 +300,7 @@ public void setPassword(String password) { return; } } - throw new RuntimeException("No HTTP basic authentication configured!"); + throw exceptionProvider.httpBasicAuthException(); } /** @@ -285,7 +314,7 @@ public void setApiKey(String apiKey) { return; } } - throw new RuntimeException("No API key authentication configured!"); + throw exceptionProvider.apiKeyAuthException(); } /** @@ -299,7 +328,7 @@ public void setApiKeyPrefix(String apiKeyPrefix) { return; } } - throw new RuntimeException("No API key authentication configured!"); + throw exceptionProvider.apiKeyAuthException(); } /** @@ -354,7 +383,7 @@ public Date parseDate(String str) { try { return dateFormat.parse(str); } catch (ParseException e) { - throw new RuntimeException(e); + throw exceptionProvider.dateTimeException(e); } } @@ -421,8 +450,8 @@ public MultiValueMap parameterToMultiValueMapJson(CollectionForm } else { try { return parameterToMultiValueMap(collectionFormat, name, mapper.writeValueAsString(value)); - } catch (JacksonException e) { - throw new RuntimeException(e); + } catch (JacksonException e) { + throw exceptionProvider.jacksonException(e); } } @@ -431,10 +460,10 @@ public MultiValueMap parameterToMultiValueMapJson(CollectionForm try { values.add(mapper.writeValueAsString(o)); } catch (JacksonException e) { - throw new RuntimeException(e); + throw exceptionProvider.jacksonException(e); } } - return parameterToMultiValueMap(collectionFormat, name, "[" + StringUtils.collectionToDelimitedString(values, collectionFormat.separator) + "]"); + return parameterToMultiValueMap(collectionFormat, name, "[" + collectionFormat.collectionToString(values) + "]"); } /** @@ -745,7 +774,7 @@ protected void updateParamsForAuth(String[] authNames, MultiValueMap extends InstantDeserializer { private static final long serialVersionUID = 1L; private final static boolean DEFAULT_NORMALIZE_ZONE_ID = DateTimeFeature.NORMALIZE_DESERIALIZED_ZONE_ID.enabledByDefault(); diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java index aa0c37aa7012..95b16b0a9795 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/RFC3339JavaTimeModule.java @@ -18,7 +18,7 @@ import tools.jackson.databind.module.SimpleModule; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class RFC3339JavaTimeModule extends SimpleModule { private static final long serialVersionUID = 1L; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java index 05a6de2af25d..482a1895de98 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerConfiguration.java @@ -18,7 +18,7 @@ /** * Representing a Server configuration. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class ServerConfiguration { public String URL; public String description; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java index 7f984316bde1..6b88c89af501 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ServerVariable.java @@ -18,7 +18,7 @@ /** * Representing a Server Variable for server URL template substitution. */ -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class ServerVariable { public String description; public String defaultValue; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java index d1b2ebaf974c..a7019e42a4d3 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/StringUtil.java @@ -16,7 +16,7 @@ import java.util.Collection; import java.util.Iterator; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class StringUtil { /** * Check if the given array contains the given value (with case-insensitive comparison). diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java index b79ac2ca2224..4ebede4c15db 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/ApiKeyAuth.java @@ -16,7 +16,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class ApiKeyAuth implements Authentication { private final String location; private final String paramName; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java index 6c10a7b585ae..3ebf4d8ef554 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/Authentication.java @@ -16,7 +16,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public interface Authentication { /** * Apply authentication settings to header and / or query parameters. diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java index 42afe54f2ff5..bad9e94fb044 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBasicAuth.java @@ -19,7 +19,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class HttpBasicAuth implements Authentication { private String username; private String password; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java index d738894e92a0..0daffacdab49 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/auth/HttpBearerAuth.java @@ -16,7 +16,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.util.MultiValueMap; -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class HttpBearerAuth implements Authentication { private final String scheme; private String bearerToken; diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java index 8533d5e37f80..6b117836f686 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/Foo.java @@ -34,29 +34,48 @@ */ @JsonPropertyOrder({ Foo.JSON_PROPERTY_DT, + Foo.JSON_PROPERTY_NULLABLE_DT, Foo.JSON_PROPERTY_BINARY, + Foo.JSON_PROPERTY_NULLABLE_BINARY, Foo.JSON_PROPERTY_LIST_OF_DT, Foo.JSON_PROPERTY_LIST_MIN_INTEMS, + Foo.JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS, Foo.JSON_PROPERTY_REQUIRED_DT, - Foo.JSON_PROPERTY_NUMBER + Foo.JSON_PROPERTY_NUMBER, + Foo.JSON_PROPERTY_NULLABLE_NUMBER, + Foo.JSON_PROPERTY_COLOR, + Foo.JSON_PROPERTY_REQUIRED_COLOR, + Foo.JSON_PROPERTY_NULLABLE_COLOR }) -@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class Foo { public static final String JSON_PROPERTY_DT = "dt"; private java.time.@Nullable Instant dt; + public static final String JSON_PROPERTY_NULLABLE_DT = "nullableDt"; + + private java.time.@Nullable Instant nullableDt; + public static final String JSON_PROPERTY_BINARY = "binary"; private @Nullable File binary; + public static final String JSON_PROPERTY_NULLABLE_BINARY = "nullableBinary"; + + private @Nullable File nullableBinary; + public static final String JSON_PROPERTY_LIST_OF_DT = "listOfDt"; - private List listOfDt; + private @Nullable List listOfDt; public static final String JSON_PROPERTY_LIST_MIN_INTEMS = "listMinIntems"; - private List listMinIntems; + private @Nullable List listMinIntems; + + public static final String JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS = "nullableListMinIntems"; + + private @Nullable List nullableListMinIntems; public static final String JSON_PROPERTY_REQUIRED_DT = "requiredDt"; @@ -66,6 +85,22 @@ public class Foo { private java.math.@Nullable BigDecimal number; + public static final String JSON_PROPERTY_NULLABLE_NUMBER = "nullableNumber"; + + private java.math.@Nullable BigDecimal nullableNumber; + + public static final String JSON_PROPERTY_COLOR = "color"; + + private @Nullable String color = "red"; + + public static final String JSON_PROPERTY_REQUIRED_COLOR = "requiredColor"; + + private String requiredColor = "red"; + + public static final String JSON_PROPERTY_NULLABLE_COLOR = "nullableColor"; + + private @Nullable String nullableColor = "red"; + public Foo() { } @@ -94,6 +129,31 @@ public void setDt(java.time.@Nullable Instant dt) { this.dt = dt; } + public Foo nullableDt(java.time.@Nullable Instant nullableDt) { + + this.nullableDt = nullableDt; + return this; + } + + /** + * Get nullableDt + * @return nullableDt + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNullableDt() { + return java.util.Optional.ofNullable(nullableDt); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_DT, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableDt(java.time.@Nullable Instant nullableDt) { + this.nullableDt = nullableDt; + } + public Foo binary(@Nullable File binary) { this.binary = binary; @@ -119,7 +179,32 @@ public void setBinary(@Nullable File binary) { this.binary = binary; } - public Foo listOfDt(List listOfDt) { + public Foo nullableBinary(@Nullable File nullableBinary) { + + this.nullableBinary = nullableBinary; + return this; + } + + /** + * Get nullableBinary + * @return nullableBinary + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_BINARY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNullableBinary() { + return java.util.Optional.ofNullable(nullableBinary); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_BINARY, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableBinary(@Nullable File nullableBinary) { + this.nullableBinary = nullableBinary; + } + + public Foo listOfDt(@Nullable List listOfDt) { this.listOfDt = listOfDt; return this; @@ -148,11 +233,11 @@ public java.util.Optional> getListOfDt() { @JsonProperty(value = JSON_PROPERTY_LIST_OF_DT, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setListOfDt(List listOfDt) { + public void setListOfDt(@Nullable List listOfDt) { this.listOfDt = listOfDt; } - public Foo listMinIntems(List listMinIntems) { + public Foo listMinIntems(@Nullable List listMinIntems) { this.listMinIntems = listMinIntems; return this; @@ -181,10 +266,43 @@ public java.util.Optional> getListMinIntems() { @JsonProperty(value = JSON_PROPERTY_LIST_MIN_INTEMS, required = false) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public void setListMinIntems(List listMinIntems) { + public void setListMinIntems(@Nullable List listMinIntems) { this.listMinIntems = listMinIntems; } + public Foo nullableListMinIntems(@Nullable List nullableListMinIntems) { + + this.nullableListMinIntems = nullableListMinIntems; + return this; + } + + public Foo addNullableListMinIntemsItem(java.time.Instant nullableListMinIntemsItem) { + if (this.nullableListMinIntems == null) { + this.nullableListMinIntems = new ArrayList<>(); + } + this.nullableListMinIntems.add(nullableListMinIntemsItem); + return this; + } + + /** + * Get nullableListMinIntems + * @return nullableListMinIntems + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional> getNullableListMinIntems() { + return java.util.Optional.ofNullable(nullableListMinIntems); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_LIST_MIN_INTEMS, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableListMinIntems(@Nullable List nullableListMinIntems) { + this.nullableListMinIntems = nullableListMinIntems; + } + public Foo requiredDt(java.time.Instant requiredDt) { this.requiredDt = requiredDt; @@ -235,6 +353,106 @@ public void setNumber(java.math.@Nullable BigDecimal number) { this.number = number; } + public Foo nullableNumber(java.math.@Nullable BigDecimal nullableNumber) { + + this.nullableNumber = nullableNumber; + return this; + } + + /** + * Get nullableNumber + * @return nullableNumber + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_NUMBER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNullableNumber() { + return java.util.Optional.ofNullable(nullableNumber); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_NUMBER, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableNumber(java.math.@Nullable BigDecimal nullableNumber) { + this.nullableNumber = nullableNumber; + } + + public Foo color(@Nullable String color) { + + this.color = color; + return this; + } + + /** + * Get color + * @return color + */ + + @JsonProperty(value = JSON_PROPERTY_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getColor() { + return java.util.Optional.ofNullable(color); + } + + + @JsonProperty(value = JSON_PROPERTY_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setColor(@Nullable String color) { + this.color = color; + } + + public Foo requiredColor(String requiredColor) { + + this.requiredColor = requiredColor; + return this; + } + + /** + * Get requiredColor + * @return requiredColor + */ + + @JsonProperty(value = JSON_PROPERTY_REQUIRED_COLOR, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public String getRequiredColor() { + return requiredColor; + } + + + @JsonProperty(value = JSON_PROPERTY_REQUIRED_COLOR, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setRequiredColor(String requiredColor) { + this.requiredColor = requiredColor; + } + + public Foo nullableColor(@Nullable String nullableColor) { + + this.nullableColor = nullableColor; + return this; + } + + /** + * Get nullableColor + * @return nullableColor + */ + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getNullableColor() { + return java.util.Optional.ofNullable(nullableColor); + } + + + @JsonProperty(value = JSON_PROPERTY_NULLABLE_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setNullableColor(@Nullable String nullableColor) { + this.nullableColor = nullableColor; + } + @Override public boolean equals(Object o) { @@ -246,16 +464,23 @@ public boolean equals(Object o) { } Foo foo = (Foo) o; return Objects.equals(this.dt, foo.dt) && + Objects.equals(this.nullableDt, foo.nullableDt) && Objects.equals(this.binary, foo.binary) && + Objects.equals(this.nullableBinary, foo.nullableBinary) && Objects.equals(this.listOfDt, foo.listOfDt) && Objects.equals(this.listMinIntems, foo.listMinIntems) && + Objects.equals(this.nullableListMinIntems, foo.nullableListMinIntems) && Objects.equals(this.requiredDt, foo.requiredDt) && - Objects.equals(this.number, foo.number); + Objects.equals(this.number, foo.number) && + Objects.equals(this.nullableNumber, foo.nullableNumber) && + Objects.equals(this.color, foo.color) && + Objects.equals(this.requiredColor, foo.requiredColor) && + Objects.equals(this.nullableColor, foo.nullableColor); } @Override public int hashCode() { - return Objects.hash(dt, binary, listOfDt, listMinIntems, requiredDt, number); + return Objects.hash(dt, nullableDt, binary, nullableBinary, listOfDt, listMinIntems, nullableListMinIntems, requiredDt, number, nullableNumber, color, requiredColor, nullableColor); } @Override @@ -263,11 +488,18 @@ public String toString() { StringBuilder sb = new StringBuilder(); sb.append("class Foo {\n"); sb.append(" dt: ").append(toIndentedString(dt)).append("\n"); + sb.append(" nullableDt: ").append(toIndentedString(nullableDt)).append("\n"); sb.append(" binary: ").append(toIndentedString(binary)).append("\n"); + sb.append(" nullableBinary: ").append(toIndentedString(nullableBinary)).append("\n"); sb.append(" listOfDt: ").append(toIndentedString(listOfDt)).append("\n"); sb.append(" listMinIntems: ").append(toIndentedString(listMinIntems)).append("\n"); + sb.append(" nullableListMinIntems: ").append(toIndentedString(nullableListMinIntems)).append("\n"); sb.append(" requiredDt: ").append(toIndentedString(requiredDt)).append("\n"); sb.append(" number: ").append(toIndentedString(number)).append("\n"); + sb.append(" nullableNumber: ").append(toIndentedString(nullableNumber)).append("\n"); + sb.append(" color: ").append(toIndentedString(color)).append("\n"); + sb.append(" requiredColor: ").append(toIndentedString(requiredColor)).append("\n"); + sb.append(" nullableColor: ").append(toIndentedString(nullableColor)).append("\n"); sb.append("}"); return sb.toString(); } diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/FILES b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/FILES index 632e71aef704..559ef9c95db3 100644 --- a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/FILES +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/FILES @@ -3,7 +3,11 @@ pom.xml src/main/java/org/openapitools/api/ApiUtil.java src/main/java/org/openapitools/api/FileApi.java src/main/java/org/openapitools/api/FooApi.java +src/main/java/org/openapitools/api/RequiredAndNullableApi.java src/main/java/org/openapitools/api/UploadApi.java +src/main/java/org/openapitools/api/UploadFilesApi.java src/main/java/org/openapitools/api/package-info.java +src/main/java/org/openapitools/model/FileContent.java src/main/java/org/openapitools/model/Foo.java +src/main/java/org/openapitools/model/RequiredAndNullable.java src/main/java/org/openapitools/model/package-info.java diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/VERSION b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/VERSION index 8fc8df61083a..32a8cfaceeb9 100644 --- a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/VERSION +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/.openapi-generator/VERSION @@ -1 +1 @@ -7.25.0-SNAPSHOT +7.26.0-SNAPSHOT diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FileApi.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FileApi.java index 0c4ff45ac8b3..61fe29a84470 100644 --- a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FileApi.java +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FileApi.java @@ -1,10 +1,11 @@ /* - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.25.0-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.26.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ package org.openapitools.api; +import org.openapitools.model.FileContent; import io.swagger.v3.oas.annotations.ExternalDocumentation; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -32,9 +33,9 @@ import java.util.Optional; import jakarta.annotation.Generated; -@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") @Validated -@Tag(name = "file", description = "the file API") +@Tag(name = "file", description = "file") public interface FileApi { default Optional getRequest() { @@ -50,17 +51,30 @@ default Optional getRequest() { */ @Operation( operationId = "fileIdGet", + tags = { "file" }, responses = { - @ApiResponse(responseCode = "200", description = "ok") + @ApiResponse(responseCode = "200", description = "ok", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = FileContent.class)) + }) } ) @RequestMapping( method = RequestMethod.GET, - value = FileApi.PATH_FILE_ID_GET + value = FileApi.PATH_FILE_ID_GET, + produces = { "application/json" } ) - default ResponseEntity fileIdGet( + default ResponseEntity fileIdGet( @Parameter(name = "id", description = "", required = true, in = ParameterIn.PATH) @PathVariable("id") String id ) { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "{ \"name\" : \"name\", \"size\" : 0, \"virusScan\" : \"clean\" }"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + } + }); return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FooApi.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FooApi.java index 8e068a12f2e3..143f65af512b 100644 --- a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FooApi.java +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/FooApi.java @@ -1,5 +1,5 @@ /* - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.25.0-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.26.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ @@ -36,9 +36,9 @@ import java.util.Optional; import jakarta.annotation.Generated; -@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") @Validated -@Tag(name = "foo", description = "the foo API") +@Tag(name = "foo", description = "foo") public interface FooApi { default Optional getRequest() { @@ -52,10 +52,12 @@ default Optional getRequest() { * @param dtParam (optional) * @param dtQuery (optional) * @param dtCookie (optional) + * @param color (optional, default to red) * @return response (status code 200) */ @Operation( operationId = "fooDtParamGet", + tags = { "foo" }, responses = { @ApiResponse(responseCode = "default", description = "response", content = { @Content(mediaType = "application/json", schema = @Schema(implementation = Foo.class)) @@ -70,12 +72,13 @@ default Optional getRequest() { default ResponseEntity fooDtParamGet( @Parameter(name = "dtParam", description = "", in = ParameterIn.PATH) @PathVariable("dtParam") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) @Nullable OffsetDateTime dtParam, @Parameter(name = "dtQuery", description = "", in = ParameterIn.QUERY) @Valid @RequestParam(value = "dtQuery", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) @Nullable OffsetDateTime dtQuery, - @Parameter(name = "dtCookie", description = "", in = ParameterIn.COOKIE) @CookieValue(name = "dtCookie", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) @Nullable OffsetDateTime dtCookie + @Parameter(name = "dtCookie", description = "", in = ParameterIn.COOKIE) @CookieValue(name = "dtCookie", required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) @Nullable OffsetDateTime dtCookie, + @Parameter(name = "color", description = "", in = ParameterIn.QUERY) @Valid @RequestParam(value = "color", required = false, defaultValue = "red") String color ) { getRequest().ifPresent(request -> { for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { - String exampleString = "{ \"dt\" : \"2000-01-23T04:56:07.000+00:00\", \"binary\" : \"\", \"listOfDt\" : [ \"2000-01-23T04:56:07.000+00:00\", \"2000-01-23T04:56:07.000+00:00\" ], \"listMinIntems\" : [ \"2000-01-23T04:56:07.000+00:00\", \"2000-01-23T04:56:07.000+00:00\" ], \"requiredDt\" : \"2000-01-23T04:56:07.000+00:00\", \"number\" : 0.8008281904610115 }"; + String exampleString = "{ \"dt\" : \"2000-01-23T04:56:07.000+00:00\", \"nullableDt\" : \"2000-01-23T04:56:07.000+00:00\", \"binary\" : \"\", \"nullableBinary\" : \"\", \"listOfDt\" : [ \"2000-01-23T04:56:07.000+00:00\", \"2000-01-23T04:56:07.000+00:00\" ], \"listMinIntems\" : [ \"2000-01-23T04:56:07.000+00:00\", \"2000-01-23T04:56:07.000+00:00\" ], \"nullableListMinIntems\" : [ \"2000-01-23T04:56:07.000+00:00\", \"2000-01-23T04:56:07.000+00:00\" ], \"requiredDt\" : \"2000-01-23T04:56:07.000+00:00\", \"number\" : 0.8008281904610115, \"nullableNumber\" : 6.027456183070403, \"color\" : \"red\", \"requiredColor\" : \"red\", \"nullableColor\" : \"red\" }"; ApiUtil.setExampleResponse(request, "application/json", exampleString); break; } diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadApi.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadApi.java index 5d679bf128a3..acdc9ebdbf00 100644 --- a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadApi.java +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadApi.java @@ -1,5 +1,5 @@ /* - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.25.0-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.26.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ @@ -33,9 +33,9 @@ import java.util.Optional; import jakarta.annotation.Generated; -@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") @Validated -@Tag(name = "upload", description = "the upload API") +@Tag(name = "upload", description = "upload") public interface UploadApi { default Optional getRequest() { @@ -51,6 +51,7 @@ default Optional getRequest() { */ @Operation( operationId = "uploadPost", + tags = { "upload" }, responses = { @ApiResponse(responseCode = "default", description = "ok") } diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/Foo.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/Foo.java index 9a9252719380..838cdb1650c0 100644 --- a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/Foo.java +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/Foo.java @@ -2,11 +2,8 @@ import java.net.URI; import java.util.Objects; -import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonSetter; -import com.fasterxml.jackson.annotation.Nulls; import java.math.BigDecimal; import java.time.OffsetDateTime; import java.util.ArrayList; @@ -34,28 +31,38 @@ @JacksonXmlRootElement(localName = "Foo") @XmlRootElement(name = "Foo") @XmlAccessorType(XmlAccessType.FIELD) -@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.25.0-SNAPSHOT") +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") public class Foo { - @JsonInclude(JsonInclude.Include.NON_NULL) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) private @Nullable OffsetDateTime dt; - @JsonInclude(JsonInclude.Include.NON_NULL) + @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) + private @Nullable OffsetDateTime nullableDt = null; + private org.springframework.core.io.@Nullable Resource binary; - @JsonInclude(JsonInclude.Include.NON_NULL) - private List listOfDt = new ArrayList<>(); + private org.springframework.core.io.@Nullable Resource nullableBinary = null; + + private @Nullable List listOfDt = new ArrayList<>(); + + private @Nullable List listMinIntems = new ArrayList<>(); - @JsonInclude(JsonInclude.Include.NON_NULL) - private List listMinIntems = new ArrayList<>(); + private @Nullable List nullableListMinIntems; @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) private OffsetDateTime requiredDt; - @JsonInclude(JsonInclude.Include.NON_NULL) private @Nullable BigDecimal number; + private @Nullable BigDecimal nullableNumber = null; + + private @Nullable String color = "red"; + + private String requiredColor = "red"; + + private @Nullable String nullableColor = null; + public Foo() { super(); } @@ -63,23 +70,31 @@ public Foo() { /** * Constructor with only required parameters */ - public Foo(OffsetDateTime requiredDt) { + public Foo(OffsetDateTime requiredDt, String requiredColor) { this.requiredDt = requiredDt; + this.requiredColor = requiredColor; } /** * Constructor with all args parameters */ - public Foo(OffsetDateTime dt, org.springframework.core.io.Resource binary, List listOfDt, List listMinIntems, OffsetDateTime requiredDt, BigDecimal number) { + public Foo(@Nullable OffsetDateTime dt, @Nullable OffsetDateTime nullableDt, org.springframework.core.io.@Nullable Resource binary, org.springframework.core.io.@Nullable Resource nullableBinary, @Nullable List listOfDt, @Nullable List listMinIntems, @Nullable List nullableListMinIntems, OffsetDateTime requiredDt, @Nullable BigDecimal number, @Nullable BigDecimal nullableNumber, @Nullable String color, String requiredColor, @Nullable String nullableColor) { this.dt = dt; + this.nullableDt = nullableDt; this.binary = binary; + this.nullableBinary = nullableBinary; this.listOfDt = listOfDt; this.listMinIntems = listMinIntems; + this.nullableListMinIntems = nullableListMinIntems; this.requiredDt = requiredDt; this.number = number; + this.nullableNumber = nullableNumber; + this.color = color; + this.requiredColor = requiredColor; + this.nullableColor = nullableColor; } - public Foo dt(OffsetDateTime dt) { + public Foo dt(@Nullable OffsetDateTime dt) { this.dt = dt; return this; } @@ -93,18 +108,41 @@ public Foo dt(OffsetDateTime dt) { @JsonProperty("dt") @JacksonXmlProperty(localName = "dt") @XmlElement(name = "dt") - public java.util.Optional<@Nullable OffsetDateTime> getDt() { + public java.util.Optional getDt() { return java.util.Optional.ofNullable(dt); } - @JsonSetter(nulls = Nulls.SKIP) @JsonProperty("dt") @JacksonXmlProperty(localName = "dt") public void setDt(@Nullable OffsetDateTime dt) { this.dt = dt; } - public Foo binary(org.springframework.core.io.Resource binary) { + public Foo nullableDt(@Nullable OffsetDateTime nullableDt) { + this.nullableDt = nullableDt; + return this; + } + + /** + * Get nullableDt + * @return nullableDt + */ + @Valid + @Schema(name = "nullableDt", requiredMode = Schema.RequiredMode.NOT_REQUIRED, nullable = true) + @JsonProperty("nullableDt") + @JacksonXmlProperty(localName = "nullableDt") + @XmlElement(name = "nullableDt") + public OffsetDateTime getNullableDt() { + return nullableDt; + } + + @JsonProperty("nullableDt") + @JacksonXmlProperty(localName = "nullableDt") + public void setNullableDt(@Nullable OffsetDateTime nullableDt) { + this.nullableDt = nullableDt; + } + + public Foo binary(org.springframework.core.io.@Nullable Resource binary) { this.binary = binary; return this; } @@ -118,18 +156,41 @@ public Foo binary(org.springframework.core.io.Resource binary) { @JsonProperty("binary") @JacksonXmlProperty(localName = "binary") @XmlElement(name = "binary") - public java.util.Optional getBinary() { + public java.util.Optional getBinary() { return java.util.Optional.ofNullable(binary); } - @JsonSetter(nulls = Nulls.SKIP) @JsonProperty("binary") @JacksonXmlProperty(localName = "binary") public void setBinary(org.springframework.core.io.@Nullable Resource binary) { this.binary = binary; } - public Foo listOfDt(List listOfDt) { + public Foo nullableBinary(org.springframework.core.io.@Nullable Resource nullableBinary) { + this.nullableBinary = nullableBinary; + return this; + } + + /** + * Get nullableBinary + * @return nullableBinary + */ + @Valid + @Schema(name = "nullableBinary", requiredMode = Schema.RequiredMode.NOT_REQUIRED, nullable = true) + @JsonProperty("nullableBinary") + @JacksonXmlProperty(localName = "nullableBinary") + @XmlElement(name = "nullableBinary") + public org.springframework.core.io.Resource getNullableBinary() { + return nullableBinary; + } + + @JsonProperty("nullableBinary") + @JacksonXmlProperty(localName = "nullableBinary") + public void setNullableBinary(org.springframework.core.io.@Nullable Resource nullableBinary) { + this.nullableBinary = nullableBinary; + } + + public Foo listOfDt(@Nullable List listOfDt) { this.listOfDt = listOfDt; return this; } @@ -156,15 +217,14 @@ public java.util.Optional> getListOfDt() { return java.util.Optional.ofNullable(listOfDt); } - @JsonSetter(nulls = Nulls.SKIP) @JsonProperty("listOfDt") @JacksonXmlProperty(localName = "listOfDt") @JacksonXmlElementWrapper(useWrapping = false) - public void setListOfDt(List listOfDt) { + public void setListOfDt(@Nullable List listOfDt) { this.listOfDt = listOfDt; } - public Foo listMinIntems(List listMinIntems) { + public Foo listMinIntems(@Nullable List listMinIntems) { this.listMinIntems = listMinIntems; return this; } @@ -191,14 +251,47 @@ public java.util.Optional> getListMinIntems() { return java.util.Optional.ofNullable(listMinIntems); } - @JsonSetter(nulls = Nulls.SKIP) @JsonProperty("listMinIntems") @JacksonXmlProperty(localName = "listMinIntems") @JacksonXmlElementWrapper(useWrapping = false) - public void setListMinIntems(List listMinIntems) { + public void setListMinIntems(@Nullable List listMinIntems) { this.listMinIntems = listMinIntems; } + public Foo nullableListMinIntems(@Nullable List nullableListMinIntems) { + this.nullableListMinIntems = nullableListMinIntems; + return this; + } + + public Foo addNullableListMinIntemsItem(OffsetDateTime nullableListMinIntemsItem) { + if (this.nullableListMinIntems == null) { + this.nullableListMinIntems = new ArrayList<>(); + } + this.nullableListMinIntems.add(nullableListMinIntemsItem); + return this; + } + + /** + * Get nullableListMinIntems + * @return nullableListMinIntems + */ + @Valid @Size(min = 1) + @Schema(name = "nullableListMinIntems", requiredMode = Schema.RequiredMode.NOT_REQUIRED, nullable = true) + @JsonProperty("nullableListMinIntems") + @JacksonXmlProperty(localName = "nullableListMinIntems") + @JacksonXmlElementWrapper(useWrapping = false) + @XmlElement(name = "nullableListMinIntems") + public List getNullableListMinIntems() { + return nullableListMinIntems; + } + + @JsonProperty("nullableListMinIntems") + @JacksonXmlProperty(localName = "nullableListMinIntems") + @JacksonXmlElementWrapper(useWrapping = false) + public void setNullableListMinIntems(@Nullable List nullableListMinIntems) { + this.nullableListMinIntems = nullableListMinIntems; + } + public Foo requiredDt(OffsetDateTime requiredDt) { this.requiredDt = requiredDt; return this; @@ -223,7 +316,7 @@ public void setRequiredDt(OffsetDateTime requiredDt) { this.requiredDt = requiredDt; } - public Foo number(BigDecimal number) { + public Foo number(@Nullable BigDecimal number) { this.number = number; return this; } @@ -237,17 +330,112 @@ public Foo number(BigDecimal number) { @JsonProperty("number") @JacksonXmlProperty(localName = "number") @XmlElement(name = "number") - public java.util.Optional<@Nullable BigDecimal> getNumber() { + public java.util.Optional getNumber() { return java.util.Optional.ofNullable(number); } - @JsonSetter(nulls = Nulls.SKIP) @JsonProperty("number") @JacksonXmlProperty(localName = "number") public void setNumber(@Nullable BigDecimal number) { this.number = number; } + public Foo nullableNumber(@Nullable BigDecimal nullableNumber) { + this.nullableNumber = nullableNumber; + return this; + } + + /** + * Get nullableNumber + * @return nullableNumber + */ + @Valid + @Schema(name = "nullableNumber", requiredMode = Schema.RequiredMode.NOT_REQUIRED, nullable = true) + @JsonProperty("nullableNumber") + @JacksonXmlProperty(localName = "nullableNumber") + @XmlElement(name = "nullableNumber") + public BigDecimal getNullableNumber() { + return nullableNumber; + } + + @JsonProperty("nullableNumber") + @JacksonXmlProperty(localName = "nullableNumber") + public void setNullableNumber(@Nullable BigDecimal nullableNumber) { + this.nullableNumber = nullableNumber; + } + + public Foo color(@Nullable String color) { + this.color = color; + return this; + } + + /** + * Get color + * @return color + */ + + @Schema(name = "color", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("color") + @JacksonXmlProperty(localName = "color") + @XmlElement(name = "color") + public java.util.Optional getColor() { + return java.util.Optional.ofNullable(color); + } + + @JsonProperty("color") + @JacksonXmlProperty(localName = "color") + public void setColor(@Nullable String color) { + this.color = color; + } + + public Foo requiredColor(String requiredColor) { + this.requiredColor = requiredColor; + return this; + } + + /** + * Get requiredColor + * @return requiredColor + */ + @NotNull + @Schema(name = "requiredColor", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("requiredColor") + @JacksonXmlProperty(localName = "requiredColor") + @XmlElement(name = "requiredColor") + public String getRequiredColor() { + return requiredColor; + } + + @JsonProperty("requiredColor") + @JacksonXmlProperty(localName = "requiredColor") + public void setRequiredColor(String requiredColor) { + this.requiredColor = requiredColor; + } + + public Foo nullableColor(@Nullable String nullableColor) { + this.nullableColor = nullableColor; + return this; + } + + /** + * Get nullableColor + * @return nullableColor + */ + + @Schema(name = "nullableColor", requiredMode = Schema.RequiredMode.NOT_REQUIRED, nullable = true) + @JsonProperty("nullableColor") + @JacksonXmlProperty(localName = "nullableColor") + @XmlElement(name = "nullableColor") + public String getNullableColor() { + return nullableColor; + } + + @JsonProperty("nullableColor") + @JacksonXmlProperty(localName = "nullableColor") + public void setNullableColor(@Nullable String nullableColor) { + this.nullableColor = nullableColor; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -258,16 +446,23 @@ public boolean equals(Object o) { } Foo foo = (Foo) o; return Objects.equals(this.dt, foo.dt) && + Objects.equals(this.nullableDt, foo.nullableDt) && Objects.equals(this.binary, foo.binary) && + Objects.equals(this.nullableBinary, foo.nullableBinary) && Objects.equals(this.listOfDt, foo.listOfDt) && Objects.equals(this.listMinIntems, foo.listMinIntems) && + Objects.equals(this.nullableListMinIntems, foo.nullableListMinIntems) && Objects.equals(this.requiredDt, foo.requiredDt) && - Objects.equals(this.number, foo.number); + Objects.equals(this.number, foo.number) && + Objects.equals(this.nullableNumber, foo.nullableNumber) && + Objects.equals(this.color, foo.color) && + Objects.equals(this.requiredColor, foo.requiredColor) && + Objects.equals(this.nullableColor, foo.nullableColor); } @Override public int hashCode() { - return Objects.hash(dt, binary, listOfDt, listMinIntems, requiredDt, number); + return Objects.hash(dt, nullableDt, binary, nullableBinary, listOfDt, listMinIntems, nullableListMinIntems, requiredDt, number, nullableNumber, color, requiredColor, nullableColor); } @Override @@ -275,11 +470,18 @@ public String toString() { StringBuilder sb = new StringBuilder(); sb.append("class Foo {\n"); sb.append(" dt: ").append(toIndentedString(dt)).append("\n"); + sb.append(" nullableDt: ").append(toIndentedString(nullableDt)).append("\n"); sb.append(" binary: ").append(toIndentedString(binary)).append("\n"); + sb.append(" nullableBinary: ").append(toIndentedString(nullableBinary)).append("\n"); sb.append(" listOfDt: ").append(toIndentedString(listOfDt)).append("\n"); sb.append(" listMinIntems: ").append(toIndentedString(listMinIntems)).append("\n"); + sb.append(" nullableListMinIntems: ").append(toIndentedString(nullableListMinIntems)).append("\n"); sb.append(" requiredDt: ").append(toIndentedString(requiredDt)).append("\n"); sb.append(" number: ").append(toIndentedString(number)).append("\n"); + sb.append(" nullableNumber: ").append(toIndentedString(nullableNumber)).append("\n"); + sb.append(" color: ").append(toIndentedString(color)).append("\n"); + sb.append(" requiredColor: ").append(toIndentedString(requiredColor)).append("\n"); + sb.append(" nullableColor: ").append(toIndentedString(nullableColor)).append("\n"); sb.append("}"); return sb.toString(); } @@ -288,7 +490,7 @@ public String toString() { * Convert the given object to string with each line indented by 4 spaces * (except the first line). */ - private String toIndentedString(Object o) { + private String toIndentedString(@Nullable Object o) { return o == null ? "null" : o.toString().replace("\n", "\n "); } @@ -306,44 +508,86 @@ protected Builder(Foo instance) { protected Builder copyOf(Foo value) { this.instance.setDt(value.dt); + this.instance.setNullableDt(value.nullableDt); this.instance.setBinary(value.binary); + this.instance.setNullableBinary(value.nullableBinary); this.instance.setListOfDt(value.listOfDt); this.instance.setListMinIntems(value.listMinIntems); + this.instance.setNullableListMinIntems(value.nullableListMinIntems); this.instance.setRequiredDt(value.requiredDt); this.instance.setNumber(value.number); + this.instance.setNullableNumber(value.nullableNumber); + this.instance.setColor(value.color); + this.instance.setRequiredColor(value.requiredColor); + this.instance.setNullableColor(value.nullableColor); return this; } - public Foo.Builder dt(OffsetDateTime dt) { + public Foo.Builder dt(@Nullable OffsetDateTime dt) { this.instance.dt(dt); return this; } - public Foo.Builder binary(org.springframework.core.io.Resource binary) { + public Foo.Builder nullableDt(@Nullable OffsetDateTime nullableDt) { + this.instance.nullableDt(nullableDt); + return this; + } + + public Foo.Builder binary(org.springframework.core.io.@Nullable Resource binary) { this.instance.binary(binary); return this; } - public Foo.Builder listOfDt(List listOfDt) { + public Foo.Builder nullableBinary(org.springframework.core.io.@Nullable Resource nullableBinary) { + this.instance.nullableBinary(nullableBinary); + return this; + } + + public Foo.Builder listOfDt(@Nullable List listOfDt) { this.instance.listOfDt(listOfDt); return this; } - public Foo.Builder listMinIntems(List listMinIntems) { + public Foo.Builder listMinIntems(@Nullable List listMinIntems) { this.instance.listMinIntems(listMinIntems); return this; } + public Foo.Builder nullableListMinIntems(@Nullable List nullableListMinIntems) { + this.instance.nullableListMinIntems(nullableListMinIntems); + return this; + } + public Foo.Builder requiredDt(OffsetDateTime requiredDt) { this.instance.requiredDt(requiredDt); return this; } - public Foo.Builder number(BigDecimal number) { + public Foo.Builder number(@Nullable BigDecimal number) { this.instance.number(number); return this; } + public Foo.Builder nullableNumber(@Nullable BigDecimal nullableNumber) { + this.instance.nullableNumber(nullableNumber); + return this; + } + + public Foo.Builder color(@Nullable String color) { + this.instance.color(color); + return this; + } + + public Foo.Builder requiredColor(String requiredColor) { + this.instance.requiredColor(requiredColor); + return this; + } + + public Foo.Builder nullableColor(@Nullable String nullableColor) { + this.instance.nullableColor(nullableColor); + return this; + } + /** * returns a built Foo instance. * From bb6082b271cacb0808224fa86ac62ecf6d964bf5 Mon Sep 17 00:00:00 2001 From: Jorge Date: Wed, 2 Sep 2026 16:37:33 +0200 Subject: [PATCH 12/15] docs: add API documentation for FileApi and RequiredAndNullableApi --- .../docs/FileApi.md | 73 ++++ .../docs/FileContent.md | 24 ++ .../docs/FooApi.md | 79 +++++ .../docs/RequiredAndNullable.md | 17 + .../docs/RequiredAndNullableApi.md | 73 ++++ .../docs/UploadApi.md | 136 ++++++++ .../client/ExceptionProvider.java | 80 +++++ .../org/openapitools/client/api/FileApi.java | 121 +++++++ .../org/openapitools/client/api/FooApi.java | 136 ++++++++ .../client/api/RequiredAndNullableApi.java | 121 +++++++ .../openapitools/client/api/UploadApi.java | 185 +++++++++++ .../client/model/FileContent.java | 183 ++++++++++ .../client/model/RequiredAndNullable.java | 243 ++++++++++++++ .../openapitools/client/api/FileApiTest.java | 48 +++ .../openapitools/client/api/FooApiTest.java | 53 +++ .../api/RequiredAndNullableApiTest.java | 48 +++ .../client/api/UploadApiTest.java | 62 ++++ .../client/model/FileContentTest.java | 63 ++++ .../client/model/RequiredAndNullableTest.java | 83 +++++ .../docs/FileApi.md | 73 ++++ .../docs/FileContent.md | 24 ++ .../docs/FooApi.md | 79 +++++ .../docs/RequiredAndNullable.md | 17 + .../docs/RequiredAndNullableApi.md | 73 ++++ .../docs/UploadApi.md | 136 ++++++++ .../org/openapitools/client/api/FileApi.java | 112 +++++++ .../org/openapitools/client/api/FooApi.java | 122 +++++++ .../client/api/RequiredAndNullableApi.java | 113 +++++++ .../openapitools/client/api/UploadApi.java | 150 +++++++++ .../client/model/FileContent.java | 183 ++++++++++ .../client/model/RequiredAndNullable.java | 243 ++++++++++++++ .../openapitools/client/api/FileApiTest.java | 54 +++ .../openapitools/client/api/FooApiTest.java | 59 ++++ .../api/RequiredAndNullableApiTest.java | 54 +++ .../client/api/UploadApiTest.java | 72 ++++ .../client/model/FileContentTest.java | 63 ++++ .../client/model/RequiredAndNullableTest.java | 83 +++++ .../docs/FileApi.md | 73 ++++ .../docs/FileContent.md | 24 ++ .../docs/FooApi.md | 79 +++++ .../docs/RequiredAndNullable.md | 17 + .../docs/RequiredAndNullableApi.md | 73 ++++ .../docs/UploadApi.md | 136 ++++++++ .../client/ExceptionProvider.java | 80 +++++ .../org/openapitools/client/api/FileApi.java | 123 +++++++ .../org/openapitools/client/api/FooApi.java | 138 ++++++++ .../client/api/RequiredAndNullableApi.java | 123 +++++++ .../openapitools/client/api/UploadApi.java | 187 +++++++++++ .../client/model/FileContent.java | 182 ++++++++++ .../client/model/RequiredAndNullable.java | 242 ++++++++++++++ .../openapitools/client/api/FileApiTest.java | 50 +++ .../openapitools/client/api/FooApiTest.java | 55 +++ .../api/RequiredAndNullableApiTest.java | 50 +++ .../client/api/UploadApiTest.java | 65 ++++ .../client/model/FileContentTest.java | 63 ++++ .../client/model/RequiredAndNullableTest.java | 83 +++++ .../api/RequiredAndNullableApi.java | 83 +++++ .../org/openapitools/api/UploadFilesApi.java | 71 ++++ .../org/openapitools/model/FileContent.java | 273 +++++++++++++++ .../model/RequiredAndNullable.java | 313 ++++++++++++++++++ 60 files changed, 6121 insertions(+) create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileApi.md create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileContent.md create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/FooApi.md create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullable.md create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullableApi.md create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/UploadApi.md create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ExceptionProvider.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FileApi.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FooApi.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/UploadApi.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/FileContent.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/RequiredAndNullable.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FileApiTest.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FooApiTest.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/UploadApiTest.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FileContentTest.java create mode 100644 samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/FileApi.md create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/FileContent.md create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/FooApi.md create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullable.md create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullableApi.md create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/UploadApi.md create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FileApi.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FooApi.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/UploadApi.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/FileContent.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/RequiredAndNullable.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FileApiTest.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FooApiTest.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/UploadApiTest.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FileContentTest.java create mode 100644 samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileApi.md create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileContent.md create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/FooApi.md create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullable.md create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullableApi.md create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/UploadApi.md create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ExceptionProvider.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FileApi.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FooApi.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/UploadApi.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/FileContent.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/RequiredAndNullable.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FileApiTest.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FooApiTest.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/UploadApiTest.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FileContentTest.java create mode 100644 samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/RequiredAndNullableApi.java create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadFilesApi.java create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/FileContent.java create mode 100644 samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/RequiredAndNullable.java diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileApi.md b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileApi.md new file mode 100644 index 000000000000..59683371bc55 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileApi.md @@ -0,0 +1,73 @@ +# FileApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**fileIdGet**](FileApi.md#fileIdGet) | **GET** /file/{id} | | + + + +## fileIdGet + +> FileContent fileIdGet(id) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.FileApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + FileApi apiInstance = new FileApi(defaultClient); + String id = "id_example"; // String | + try { + FileContent result = apiInstance.fileIdGet(id); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling FileApi#fileIdGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **id** | **String**| | | + +### Return type + +[**FileContent**](FileContent.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | ok | - | + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileContent.md b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileContent.md new file mode 100644 index 000000000000..5b6654a0bf18 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileContent.md @@ -0,0 +1,24 @@ + + +# FileContent + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**name** | **String** | | [readonly] | +|**size** | **Integer** | | [optional] [readonly] | +|**virusScan** | [**VirusScanEnum**](#VirusScanEnum) | | [optional] [readonly] | + + + +## Enum: VirusScanEnum + +| Name | Value | +|---- | -----| +| CLEAN | "clean" | +| DETECTED | "detected" | + + + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/FooApi.md b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/FooApi.md new file mode 100644 index 000000000000..75dd91aeda8e --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/FooApi.md @@ -0,0 +1,79 @@ +# FooApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**fooDtParamGet**](FooApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | | + + + +## fooDtParamGet + +> Foo fooDtParamGet(dtParam, dtQuery, dtCookie, color) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.FooApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + FooApi apiInstance = new FooApi(defaultClient); + java.time.Instant dtParam = new java.time.Instant(); // java.time.Instant | + java.time.Instant dtQuery = new java.time.Instant(); // java.time.Instant | + java.time.Instant dtCookie = new java.time.Instant(); // java.time.Instant | + String color = "red"; // String | + try { + Foo result = apiInstance.fooDtParamGet(dtParam, dtQuery, dtCookie, color); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling FooApi#fooDtParamGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **dtParam** | **java.time.Instant**| | [optional] | +| **dtQuery** | **java.time.Instant**| | [optional] | +| **dtCookie** | **java.time.Instant**| | [optional] | +| **color** | **String**| | [optional] [default to red] | + +### Return type + +[**Foo**](Foo.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | response | - | + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullable.md b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullable.md new file mode 100644 index 000000000000..ff4ade0f226d --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullable.md @@ -0,0 +1,17 @@ + + +# RequiredAndNullable + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**str** | **String** | | | +|**_file** | **File** | | | +|**color** | **String** | | | +|**onlyRequired** | **String** | | | +|**_list** | **List<String>** | | | + + + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullableApi.md b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullableApi.md new file mode 100644 index 000000000000..ada434bf0b9e --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullableApi.md @@ -0,0 +1,73 @@ +# RequiredAndNullableApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**requiredAndNullablePost**](RequiredAndNullableApi.md#requiredAndNullablePost) | **POST** /requiredAndNullable | | + + + +## requiredAndNullablePost + +> RequiredAndNullable requiredAndNullablePost(requiredAndNullable) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.RequiredAndNullableApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + RequiredAndNullableApi apiInstance = new RequiredAndNullableApi(defaultClient); + RequiredAndNullable requiredAndNullable = new RequiredAndNullable(); // RequiredAndNullable | bodyWithRequiredAndNullableAttributes + try { + RequiredAndNullable result = apiInstance.requiredAndNullablePost(requiredAndNullable); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling RequiredAndNullableApi#requiredAndNullablePost"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **requiredAndNullable** | [**RequiredAndNullable**](RequiredAndNullable.md)| bodyWithRequiredAndNullableAttributes | | + +### Return type + +[**RequiredAndNullable**](RequiredAndNullable.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | response | - | + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/UploadApi.md b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/UploadApi.md new file mode 100644 index 000000000000..95a6d603d5bf --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/docs/UploadApi.md @@ -0,0 +1,136 @@ +# UploadApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**uploadFilesPost**](UploadApi.md#uploadFilesPost) | **POST** /uploadFiles | | +| [**uploadPost**](UploadApi.md#uploadPost) | **POST** /upload | | + + + +## uploadFilesPost + +> uploadFilesPost(_file) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.UploadApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + UploadApi apiInstance = new UploadApi(defaultClient); + List _file = Arrays.asList(); // List | + try { + apiInstance.uploadFilesPost(_file); + } catch (ApiException e) { + System.err.println("Exception when calling UploadApi#uploadFilesPost"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **_file** | **List<File>**| | [optional] | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: multipart/form-data +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | ok | - | + + +## uploadPost + +> uploadPost(_file) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.UploadApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + UploadApi apiInstance = new UploadApi(defaultClient); + File _file = new File("/path/to/file"); // File | + try { + apiInstance.uploadPost(_file); + } catch (ApiException e) { + System.err.println("Exception when calling UploadApi#uploadPost"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **_file** | **File**| | [optional] | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: multipart/form-data +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | ok | - | + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ExceptionProvider.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ExceptionProvider.java new file mode 100644 index 000000000000..bdc5d021d34a --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ExceptionProvider.java @@ -0,0 +1,80 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import org.springframework.web.client.RestClientException; +import java.text.ParseException; + +/** + * Extension point for customizing exceptions thrown by the generated API client. + *

    + * The default implementation throws {@link RuntimeException}. To use custom exception + * types, implement this interface and pass the instance to + * {@link ApiClient#setExceptionProvider(ExceptionProvider)}. + *

    + *
    {@code
    + * apiClient.setExceptionProvider(new ExceptionProvider() {
    + *     public RuntimeException bearerAuthException() {
    + *         return new MyAuthException("No Bearer authentication configured!");
    + *     }
    + * });
    + * }
    + */ +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public interface ExceptionProvider { + + /** Returns an exception indicating that no Bearer authentication is configured. */ + default RuntimeException bearerAuthException() { + return new RuntimeException("No Bearer authentication configured!"); + } + + /** Returns an exception indicating that no HTTP basic authentication is configured. */ + default RuntimeException httpBasicAuthException() { + return new RuntimeException("No HTTP basic authentication configured!"); + } + + /** Returns an exception indicating that no API key authentication is configured. */ + default RuntimeException apiKeyAuthException() { + return new RuntimeException("No API key authentication configured!"); + } + + /** Returns an exception indicating that no OAuth2 authentication is configured. */ + default RuntimeException oAuth2Exception() { + return new RuntimeException("No OAuth2 authentication configured!"); + } + + /** Wraps a date/time parse exception. */ + default RuntimeException dateTimeException(ParseException e) { + return new RuntimeException(e); + } + + /** Wraps a Jackson serialization/deserialization exception. */ + default RuntimeException jacksonException(Exception e) { + return new RuntimeException(e); + } + + /** + * Returns an exception indicating that the requested authentication scheme is not configured. + * + * @param authName the name of the authentication scheme that could not be found + * @return a {@link RestClientException} describing the missing authentication + */ + default RestClientException undefinedAuthenticationException(String authName) { + return new RestClientException("Authentication undefined: " + authName); + } + + /** The default {@link ExceptionProvider} instance. */ + ExceptionProvider DEFAULT = new ExceptionProvider() {}; + +} \ No newline at end of file diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FileApi.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FileApi.java new file mode 100644 index 000000000000..95651ecf3af2 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FileApi.java @@ -0,0 +1,121 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; + +import org.openapitools.client.model.FileContent; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Arrays; +import java.util.stream.Collectors; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestClient.ResponseSpec; +import org.springframework.web.client.RestClientResponseException; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class FileApi { + private ApiClient apiClient; + + public FileApi() { + this(new ApiClient()); + } + + public FileApi(ApiClient apiClient) { + this.apiClient = apiClient; + } + + public ApiClient getApiClient() { + return apiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.apiClient = apiClient; + } + + /** + * + * + *

    200 - ok + * @param id The id parameter + * @return FileContent + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec fileIdGetRequestCreation(String id) throws RestClientResponseException { + Object postBody = null; + // verify the required parameter 'id' is set + if (id == null) { + throw new RestClientResponseException("Missing the required parameter 'id' when calling fileIdGet", HttpStatus.BAD_REQUEST.value(), HttpStatus.BAD_REQUEST.getReasonPhrase(), null, null, null); + } + // create path and map variables + final Map pathParams = new HashMap<>(); + + pathParams.put("id", id); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap<>(); + final MultiValueMap formParams = new LinkedMultiValueMap<>(); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return apiClient.invokeAPI("/file/{id}", HttpMethod.GET, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

    200 - ok + * @param id The id parameter + * @return FileContent + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public FileContent fileIdGet(String id) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return fileIdGetRequestCreation(id).body(localVarReturnType); + } + + /** + * + * + *

    200 - ok + * @param id The id parameter + * @return ResponseEntity<FileContent> + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseEntity fileIdGetWithHttpInfo(String id) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return fileIdGetRequestCreation(id).toEntity(localVarReturnType); + } + + /** + * + * + *

    200 - ok + * @param id The id parameter + * @return ResponseSpec + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec fileIdGetWithResponseSpec(String id) throws RestClientResponseException { + return fileIdGetRequestCreation(id); + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FooApi.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FooApi.java new file mode 100644 index 000000000000..ed1edbe81568 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FooApi.java @@ -0,0 +1,136 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; + +import org.openapitools.client.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Arrays; +import java.util.stream.Collectors; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestClient.ResponseSpec; +import org.springframework.web.client.RestClientResponseException; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class FooApi { + private ApiClient apiClient; + + public FooApi() { + this(new ApiClient()); + } + + public FooApi(ApiClient apiClient) { + this.apiClient = apiClient; + } + + public ApiClient getApiClient() { + return apiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.apiClient = apiClient; + } + + /** + * + * + *

    0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @param color The color parameter + * @return Foo + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec fooDtParamGetRequestCreation(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie, @Nullable String color) throws RestClientResponseException { + Object postBody = null; + // create path and map variables + final Map pathParams = new HashMap<>(); + + pathParams.put("dtParam", dtParam); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap<>(); + final MultiValueMap formParams = new LinkedMultiValueMap<>(); + + localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "dtQuery", dtQuery)); + localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "color", color)); + + cookieParams.putAll(apiClient.parameterToMultiValueMap(null, "dtCookie", dtCookie)); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return apiClient.invokeAPI("/foo/{dtParam}", HttpMethod.GET, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

    0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @param color The color parameter + * @return Foo + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public Foo fooDtParamGet(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie, @Nullable String color) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return fooDtParamGetRequestCreation(dtParam, dtQuery, dtCookie, color).body(localVarReturnType); + } + + /** + * + * + *

    0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @param color The color parameter + * @return ResponseEntity<Foo> + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseEntity fooDtParamGetWithHttpInfo(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie, @Nullable String color) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return fooDtParamGetRequestCreation(dtParam, dtQuery, dtCookie, color).toEntity(localVarReturnType); + } + + /** + * + * + *

    0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @param color The color parameter + * @return ResponseSpec + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec fooDtParamGetWithResponseSpec(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie, @Nullable String color) throws RestClientResponseException { + return fooDtParamGetRequestCreation(dtParam, dtQuery, dtCookie, color); + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java new file mode 100644 index 000000000000..fb14eed980f0 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java @@ -0,0 +1,121 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; + +import org.openapitools.client.model.RequiredAndNullable; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Arrays; +import java.util.stream.Collectors; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestClient.ResponseSpec; +import org.springframework.web.client.RestClientResponseException; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class RequiredAndNullableApi { + private ApiClient apiClient; + + public RequiredAndNullableApi() { + this(new ApiClient()); + } + + public RequiredAndNullableApi(ApiClient apiClient) { + this.apiClient = apiClient; + } + + public ApiClient getApiClient() { + return apiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.apiClient = apiClient; + } + + /** + * + * + *

    0 - response + * @param requiredAndNullable bodyWithRequiredAndNullableAttributes + * @return RequiredAndNullable + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec requiredAndNullablePostRequestCreation(RequiredAndNullable requiredAndNullable) throws RestClientResponseException { + Object postBody = requiredAndNullable; + // verify the required parameter 'requiredAndNullable' is set + if (requiredAndNullable == null) { + throw new RestClientResponseException("Missing the required parameter 'requiredAndNullable' when calling requiredAndNullablePost", HttpStatus.BAD_REQUEST.value(), HttpStatus.BAD_REQUEST.getReasonPhrase(), null, null, null); + } + // create path and map variables + final Map pathParams = new HashMap<>(); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap<>(); + final MultiValueMap formParams = new LinkedMultiValueMap<>(); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "application/json" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return apiClient.invokeAPI("/requiredAndNullable", HttpMethod.POST, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

    0 - response + * @param requiredAndNullable bodyWithRequiredAndNullableAttributes + * @return RequiredAndNullable + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public RequiredAndNullable requiredAndNullablePost(RequiredAndNullable requiredAndNullable) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return requiredAndNullablePostRequestCreation(requiredAndNullable).body(localVarReturnType); + } + + /** + * + * + *

    0 - response + * @param requiredAndNullable bodyWithRequiredAndNullableAttributes + * @return ResponseEntity<RequiredAndNullable> + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseEntity requiredAndNullablePostWithHttpInfo(RequiredAndNullable requiredAndNullable) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return requiredAndNullablePostRequestCreation(requiredAndNullable).toEntity(localVarReturnType); + } + + /** + * + * + *

    0 - response + * @param requiredAndNullable bodyWithRequiredAndNullableAttributes + * @return ResponseSpec + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec requiredAndNullablePostWithResponseSpec(RequiredAndNullable requiredAndNullable) throws RestClientResponseException { + return requiredAndNullablePostRequestCreation(requiredAndNullable); + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/UploadApi.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/UploadApi.java new file mode 100644 index 000000000000..2c0d8ffe4cda --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/UploadApi.java @@ -0,0 +1,185 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; + +import java.io.File; +import org.jspecify.annotations.Nullable; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Arrays; +import java.util.stream.Collectors; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestClient.ResponseSpec; +import org.springframework.web.client.RestClientResponseException; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class UploadApi { + private ApiClient apiClient; + + public UploadApi() { + this(new ApiClient()); + } + + public UploadApi(ApiClient apiClient) { + this.apiClient = apiClient; + } + + public ApiClient getApiClient() { + return apiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.apiClient = apiClient; + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec uploadFilesPostRequestCreation(@Nullable List _file) throws RestClientResponseException { + Object postBody = null; + // create path and map variables + final Map pathParams = new HashMap<>(); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap<>(); + final MultiValueMap formParams = new LinkedMultiValueMap<>(); + + if (_file != null) + formParams.addAll("file", _file.stream().map(FileSystemResource::new).collect(Collectors.toList())); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "multipart/form-data" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return apiClient.invokeAPI("/uploadFiles", HttpMethod.POST, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public void uploadFilesPost(@Nullable List _file) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + uploadFilesPostRequestCreation(_file).body(localVarReturnType); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseEntity uploadFilesPostWithHttpInfo(@Nullable List _file) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return uploadFilesPostRequestCreation(_file).toEntity(localVarReturnType); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @return ResponseSpec + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec uploadFilesPostWithResponseSpec(@Nullable List _file) throws RestClientResponseException { + return uploadFilesPostRequestCreation(_file); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec uploadPostRequestCreation(@Nullable File _file) throws RestClientResponseException { + Object postBody = null; + // create path and map variables + final Map pathParams = new HashMap<>(); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap<>(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap<>(); + final MultiValueMap formParams = new LinkedMultiValueMap<>(); + + if (_file != null) + formParams.add("file", new FileSystemResource(_file)); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "multipart/form-data" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return apiClient.invokeAPI("/upload", HttpMethod.POST, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public void uploadPost(@Nullable File _file) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + uploadPostRequestCreation(_file).body(localVarReturnType); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseEntity uploadPostWithHttpInfo(@Nullable File _file) throws RestClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference<>() {}; + return uploadPostRequestCreation(_file).toEntity(localVarReturnType); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @return ResponseSpec + * @throws RestClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec uploadPostWithResponseSpec(@Nullable File _file) throws RestClientResponseException { + return uploadPostRequestCreation(_file); + } +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/FileContent.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/FileContent.java new file mode 100644 index 000000000000..5441a7390e50 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/FileContent.java @@ -0,0 +1,183 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import org.jspecify.annotations.Nullable; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * FileContent + */ +@JsonPropertyOrder({ + FileContent.JSON_PROPERTY_NAME, + FileContent.JSON_PROPERTY_SIZE, + FileContent.JSON_PROPERTY_VIRUS_SCAN +}) +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class FileContent { + public static final String JSON_PROPERTY_NAME = "name"; + + private String name; + + public static final String JSON_PROPERTY_SIZE = "size"; + + private @Nullable Integer size; + + /** + * Gets or Sets virusScan + */ + public enum VirusScanEnum { + CLEAN(String.valueOf("clean")), + + DETECTED(String.valueOf("detected")); + + private String value; + + VirusScanEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static VirusScanEnum fromValue(String value) { + for (VirusScanEnum b : VirusScanEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + } + + public static final String JSON_PROPERTY_VIRUS_SCAN = "virusScan"; + + private @Nullable VirusScanEnum virusScan; + + public FileContent() { + } + /** + * Constructor with only readonly parameters + */ + @JsonCreator + public FileContent( + @JsonProperty(JSON_PROPERTY_NAME) String name, + @JsonProperty(JSON_PROPERTY_SIZE) Integer size, + @JsonProperty(JSON_PROPERTY_VIRUS_SCAN) VirusScanEnum virusScan + ) { + this(); + this.name = name; + this.size = size; + this.virusScan = virusScan; + } + + /** + * Get name + * @return name + */ + + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public String getName() { + return name; + } + + + + /** + * Get size + * @return size + */ + + @JsonProperty(value = JSON_PROPERTY_SIZE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getSize() { + return java.util.Optional.ofNullable(size); + } + + + + /** + * Get virusScan + * @return virusScan + */ + + @JsonProperty(value = JSON_PROPERTY_VIRUS_SCAN, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getVirusScan() { + return java.util.Optional.ofNullable(virusScan); + } + + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + FileContent fileContent = (FileContent) o; + return Objects.equals(this.name, fileContent.name) && + Objects.equals(this.size, fileContent.size) && + Objects.equals(this.virusScan, fileContent.virusScan); + } + + @Override + public int hashCode() { + return Objects.hash(name, size, virusScan); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class FileContent {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" size: ").append(toIndentedString(size)).append("\n"); + sb.append(" virusScan: ").append(toIndentedString(virusScan)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } + +} + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/RequiredAndNullable.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/RequiredAndNullable.java new file mode 100644 index 000000000000..460f6e1faa99 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/RequiredAndNullable.java @@ -0,0 +1,243 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * RequiredAndNullable + */ +@JsonPropertyOrder({ + RequiredAndNullable.JSON_PROPERTY_STR, + RequiredAndNullable.JSON_PROPERTY_FILE, + RequiredAndNullable.JSON_PROPERTY_COLOR, + RequiredAndNullable.JSON_PROPERTY_ONLY_REQUIRED, + RequiredAndNullable.JSON_PROPERTY_LIST +}) +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class RequiredAndNullable { + public static final String JSON_PROPERTY_STR = "str"; + + private @Nullable String str; + + public static final String JSON_PROPERTY_FILE = "file"; + + private @Nullable File _file; + + public static final String JSON_PROPERTY_COLOR = "color"; + + private @Nullable String color = "red"; + + public static final String JSON_PROPERTY_ONLY_REQUIRED = "onlyRequired"; + + private String onlyRequired; + + public static final String JSON_PROPERTY_LIST = "list"; + + private @Nullable List _list; + + public RequiredAndNullable() { + } + + public RequiredAndNullable str(@Nullable String str) { + + this.str = str; + return this; + } + + /** + * Get str + * @return str + */ + + @JsonProperty(value = JSON_PROPERTY_STR, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public @Nullable String getStr() { + return str; + } + + + @JsonProperty(value = JSON_PROPERTY_STR, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setStr(@Nullable String str) { + this.str = str; + } + + public RequiredAndNullable _file(@Nullable File _file) { + + this._file = _file; + return this; + } + + /** + * Get _file + * @return _file + */ + + @JsonProperty(value = JSON_PROPERTY_FILE, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public @Nullable File getFile() { + return _file; + } + + + @JsonProperty(value = JSON_PROPERTY_FILE, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setFile(@Nullable File _file) { + this._file = _file; + } + + public RequiredAndNullable color(@Nullable String color) { + + this.color = color; + return this; + } + + /** + * Get color + * @return color + */ + + @JsonProperty(value = JSON_PROPERTY_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public @Nullable String getColor() { + return color; + } + + + @JsonProperty(value = JSON_PROPERTY_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setColor(@Nullable String color) { + this.color = color; + } + + public RequiredAndNullable onlyRequired(String onlyRequired) { + + this.onlyRequired = onlyRequired; + return this; + } + + /** + * Get onlyRequired + * @return onlyRequired + */ + + @JsonProperty(value = JSON_PROPERTY_ONLY_REQUIRED, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public String getOnlyRequired() { + return onlyRequired; + } + + + @JsonProperty(value = JSON_PROPERTY_ONLY_REQUIRED, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setOnlyRequired(String onlyRequired) { + this.onlyRequired = onlyRequired; + } + + public RequiredAndNullable _list(@Nullable List _list) { + + this._list = _list; + return this; + } + + public RequiredAndNullable addListItem(String _listItem) { + if (this._list == null) { + this._list = new ArrayList<>(); + } + this._list.add(_listItem); + return this; + } + + /** + * Get _list + * @return _list + */ + + @JsonProperty(value = JSON_PROPERTY_LIST, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public @Nullable List getList() { + return _list; + } + + + @JsonProperty(value = JSON_PROPERTY_LIST, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setList(@Nullable List _list) { + this._list = _list; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RequiredAndNullable requiredAndNullable = (RequiredAndNullable) o; + return Objects.equals(this.str, requiredAndNullable.str) && + Objects.equals(this._file, requiredAndNullable._file) && + Objects.equals(this.color, requiredAndNullable.color) && + Objects.equals(this.onlyRequired, requiredAndNullable.onlyRequired) && + Objects.equals(this._list, requiredAndNullable._list); + } + + @Override + public int hashCode() { + return Objects.hash(str, _file, color, onlyRequired, _list); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RequiredAndNullable {\n"); + sb.append(" str: ").append(toIndentedString(str)).append("\n"); + sb.append(" _file: ").append(toIndentedString(_file)).append("\n"); + sb.append(" color: ").append(toIndentedString(color)).append("\n"); + sb.append(" onlyRequired: ").append(toIndentedString(onlyRequired)).append("\n"); + sb.append(" _list: ").append(toIndentedString(_list)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } + +} + diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FileApiTest.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FileApiTest.java new file mode 100644 index 000000000000..ce5d7c6c6123 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FileApiTest.java @@ -0,0 +1,48 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import org.openapitools.client.model.FileContent; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * API tests for FileApi + */ +@Disabled +public class FileApiTest { + + private final FileApi api = new FileApi(); + + + /** + * + * + * + */ + @Test + public void fileIdGetTest() { + String id = null; + FileContent response = api.fileIdGet(id); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FooApiTest.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FooApiTest.java new file mode 100644 index 000000000000..8fba1baf72f8 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FooApiTest.java @@ -0,0 +1,53 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import org.openapitools.client.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * API tests for FooApi + */ +@Disabled +public class FooApiTest { + + private final FooApi api = new FooApi(); + + + /** + * + * + * + */ + @Test + public void fooDtParamGetTest() { + java.time.Instant dtParam = null; + java.time.Instant dtQuery = null; + java.time.Instant dtCookie = null; + String color = null; + Foo response = api.fooDtParamGet(dtParam, dtQuery, dtCookie, color); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java new file mode 100644 index 000000000000..41e971ae1aa5 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java @@ -0,0 +1,48 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import org.openapitools.client.model.RequiredAndNullable; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * API tests for RequiredAndNullableApi + */ +@Disabled +public class RequiredAndNullableApiTest { + + private final RequiredAndNullableApi api = new RequiredAndNullableApi(); + + + /** + * + * + * + */ + @Test + public void requiredAndNullablePostTest() { + RequiredAndNullable requiredAndNullable = null; + RequiredAndNullable response = api.requiredAndNullablePost(requiredAndNullable); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/UploadApiTest.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/UploadApiTest.java new file mode 100644 index 000000000000..561ece97dae4 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/UploadApiTest.java @@ -0,0 +1,62 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import java.io.File; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * API tests for UploadApi + */ +@Disabled +public class UploadApiTest { + + private final UploadApi api = new UploadApi(); + + + /** + * + * + * + */ + @Test + public void uploadFilesPostTest() { + List _file = null; + api.uploadFilesPost(_file); + + // TODO: test validations + } + + /** + * + * + * + */ + @Test + public void uploadPostTest() { + File _file = null; + api.uploadPost(_file); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FileContentTest.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FileContentTest.java new file mode 100644 index 000000000000..ef670ad23315 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FileContentTest.java @@ -0,0 +1,63 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +/** + * Model tests for FileContent + */ +class FileContentTest { + private final FileContent model = new FileContent(); + + /** + * Model tests for FileContent + */ + @Test + void testFileContent() { + // TODO: test FileContent + } + + /** + * Test the property 'name' + */ + @Test + void nameTest() { + // TODO: test name + } + + /** + * Test the property 'size' + */ + @Test + void sizeTest() { + // TODO: test size + } + + /** + * Test the property 'virusScan' + */ + @Test + void virusScanTest() { + // TODO: test virusScan + } + +} diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java new file mode 100644 index 000000000000..d2d8f59cb506 --- /dev/null +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java @@ -0,0 +1,83 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +/** + * Model tests for RequiredAndNullable + */ +class RequiredAndNullableTest { + private final RequiredAndNullable model = new RequiredAndNullable(); + + /** + * Model tests for RequiredAndNullable + */ + @Test + void testRequiredAndNullable() { + // TODO: test RequiredAndNullable + } + + /** + * Test the property 'str' + */ + @Test + void strTest() { + // TODO: test str + } + + /** + * Test the property '_file' + */ + @Test + void _fileTest() { + // TODO: test _file + } + + /** + * Test the property 'color' + */ + @Test + void colorTest() { + // TODO: test color + } + + /** + * Test the property 'onlyRequired' + */ + @Test + void onlyRequiredTest() { + // TODO: test onlyRequired + } + + /** + * Test the property '_list' + */ + @Test + void _listTest() { + // TODO: test _list + } + +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/FileApi.md b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/FileApi.md new file mode 100644 index 000000000000..59683371bc55 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/FileApi.md @@ -0,0 +1,73 @@ +# FileApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**fileIdGet**](FileApi.md#fileIdGet) | **GET** /file/{id} | | + + + +## fileIdGet + +> FileContent fileIdGet(id) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.FileApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + FileApi apiInstance = new FileApi(defaultClient); + String id = "id_example"; // String | + try { + FileContent result = apiInstance.fileIdGet(id); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling FileApi#fileIdGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **id** | **String**| | | + +### Return type + +[**FileContent**](FileContent.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | ok | - | + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/FileContent.md b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/FileContent.md new file mode 100644 index 000000000000..5b6654a0bf18 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/FileContent.md @@ -0,0 +1,24 @@ + + +# FileContent + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**name** | **String** | | [readonly] | +|**size** | **Integer** | | [optional] [readonly] | +|**virusScan** | [**VirusScanEnum**](#VirusScanEnum) | | [optional] [readonly] | + + + +## Enum: VirusScanEnum + +| Name | Value | +|---- | -----| +| CLEAN | "clean" | +| DETECTED | "detected" | + + + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/FooApi.md b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/FooApi.md new file mode 100644 index 000000000000..75dd91aeda8e --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/FooApi.md @@ -0,0 +1,79 @@ +# FooApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**fooDtParamGet**](FooApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | | + + + +## fooDtParamGet + +> Foo fooDtParamGet(dtParam, dtQuery, dtCookie, color) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.FooApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + FooApi apiInstance = new FooApi(defaultClient); + java.time.Instant dtParam = new java.time.Instant(); // java.time.Instant | + java.time.Instant dtQuery = new java.time.Instant(); // java.time.Instant | + java.time.Instant dtCookie = new java.time.Instant(); // java.time.Instant | + String color = "red"; // String | + try { + Foo result = apiInstance.fooDtParamGet(dtParam, dtQuery, dtCookie, color); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling FooApi#fooDtParamGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **dtParam** | **java.time.Instant**| | [optional] | +| **dtQuery** | **java.time.Instant**| | [optional] | +| **dtCookie** | **java.time.Instant**| | [optional] | +| **color** | **String**| | [optional] [default to red] | + +### Return type + +[**Foo**](Foo.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | response | - | + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullable.md b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullable.md new file mode 100644 index 000000000000..ff4ade0f226d --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullable.md @@ -0,0 +1,17 @@ + + +# RequiredAndNullable + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**str** | **String** | | | +|**_file** | **File** | | | +|**color** | **String** | | | +|**onlyRequired** | **String** | | | +|**_list** | **List<String>** | | | + + + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullableApi.md b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullableApi.md new file mode 100644 index 000000000000..ada434bf0b9e --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullableApi.md @@ -0,0 +1,73 @@ +# RequiredAndNullableApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**requiredAndNullablePost**](RequiredAndNullableApi.md#requiredAndNullablePost) | **POST** /requiredAndNullable | | + + + +## requiredAndNullablePost + +> RequiredAndNullable requiredAndNullablePost(requiredAndNullable) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.RequiredAndNullableApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + RequiredAndNullableApi apiInstance = new RequiredAndNullableApi(defaultClient); + RequiredAndNullable requiredAndNullable = new RequiredAndNullable(); // RequiredAndNullable | bodyWithRequiredAndNullableAttributes + try { + RequiredAndNullable result = apiInstance.requiredAndNullablePost(requiredAndNullable); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling RequiredAndNullableApi#requiredAndNullablePost"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **requiredAndNullable** | [**RequiredAndNullable**](RequiredAndNullable.md)| bodyWithRequiredAndNullableAttributes | | + +### Return type + +[**RequiredAndNullable**](RequiredAndNullable.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | response | - | + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/UploadApi.md b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/UploadApi.md new file mode 100644 index 000000000000..95a6d603d5bf --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/docs/UploadApi.md @@ -0,0 +1,136 @@ +# UploadApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**uploadFilesPost**](UploadApi.md#uploadFilesPost) | **POST** /uploadFiles | | +| [**uploadPost**](UploadApi.md#uploadPost) | **POST** /upload | | + + + +## uploadFilesPost + +> uploadFilesPost(_file) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.UploadApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + UploadApi apiInstance = new UploadApi(defaultClient); + List _file = Arrays.asList(); // List | + try { + apiInstance.uploadFilesPost(_file); + } catch (ApiException e) { + System.err.println("Exception when calling UploadApi#uploadFilesPost"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **_file** | **List<File>**| | [optional] | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: multipart/form-data +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | ok | - | + + +## uploadPost + +> uploadPost(_file) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.UploadApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + UploadApi apiInstance = new UploadApi(defaultClient); + File _file = new File("/path/to/file"); // File | + try { + apiInstance.uploadPost(_file); + } catch (ApiException e) { + System.err.println("Exception when calling UploadApi#uploadPost"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **_file** | **File**| | [optional] | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: multipart/form-data +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | ok | - | + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FileApi.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FileApi.java new file mode 100644 index 000000000000..00d98ee7708c --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FileApi.java @@ -0,0 +1,112 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; +import org.openapitools.client.BaseApi; + +import org.openapitools.client.model.FileContent; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.core.io.FileSystemResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class FileApi extends BaseApi { + + public FileApi() { + super(new ApiClient()); + } + + public FileApi(ApiClient apiClient) { + super(apiClient); + } + + /** + * + * + *

    200 - ok + * @param id (required) + * @return FileContent + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public FileContent fileIdGet(String id) throws RestClientException { + return fileIdGetWithHttpInfo(id).getBody(); + } + + /** + * + * + *

    200 - ok + * @param id (required) + * @return ResponseEntity<FileContent> + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public ResponseEntity fileIdGetWithHttpInfo(String id) throws RestClientException { + Object localVarPostBody = null; + + // verify the required parameter 'id' is set + if (id == null) { + throw new HttpClientErrorException(HttpStatus.BAD_REQUEST, "Missing the required parameter 'id' when calling fileIdGet"); + } + + // create path and map variables + final Map uriVariables = new HashMap(); + uriVariables.put("id", id); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/file/{id}", HttpMethod.GET, uriVariables, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, localReturnType); + } + + @Override + public ResponseEntity invokeAPI(String url, HttpMethod method, Object request, ParameterizedTypeReference returnType) throws RestClientException { + String localVarPath = url.replace(apiClient.getBasePath(), ""); + Object localVarPostBody = request; + + final Map uriVariables = new HashMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + return apiClient.invokeAPI(localVarPath, method, uriVariables, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, returnType); + } +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FooApi.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FooApi.java new file mode 100644 index 000000000000..392e33f924a7 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FooApi.java @@ -0,0 +1,122 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; +import org.openapitools.client.BaseApi; + +import org.openapitools.client.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.core.io.FileSystemResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class FooApi extends BaseApi { + + public FooApi() { + super(new ApiClient()); + } + + public FooApi(ApiClient apiClient) { + super(apiClient); + } + + /** + * + * + *

    0 - response + * @param dtParam (optional) + * @param dtQuery (optional) + * @param dtCookie (optional) + * @param color (optional, default to red) + * @return Foo + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public Foo fooDtParamGet(java.time.Instant dtParam, java.time.Instant dtQuery, java.time.Instant dtCookie, String color) throws RestClientException { + return fooDtParamGetWithHttpInfo(dtParam, dtQuery, dtCookie, color).getBody(); + } + + /** + * + * + *

    0 - response + * @param dtParam (optional) + * @param dtQuery (optional) + * @param dtCookie (optional) + * @param color (optional, default to red) + * @return ResponseEntity<Foo> + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public ResponseEntity fooDtParamGetWithHttpInfo(java.time.Instant dtParam, java.time.Instant dtQuery, java.time.Instant dtCookie, String color) throws RestClientException { + Object localVarPostBody = null; + + // create path and map variables + final Map uriVariables = new HashMap(); + uriVariables.put("dtParam", dtParam); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "dtQuery", dtQuery)); + localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "color", color)); + + + if (dtCookie != null) + localVarCookieParams.add("dtCookie", apiClient.parameterToString(dtCookie)); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/foo/{dtParam}", HttpMethod.GET, uriVariables, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, localReturnType); + } + + @Override + public ResponseEntity invokeAPI(String url, HttpMethod method, Object request, ParameterizedTypeReference returnType) throws RestClientException { + String localVarPath = url.replace(apiClient.getBasePath(), ""); + Object localVarPostBody = request; + + final Map uriVariables = new HashMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + return apiClient.invokeAPI(localVarPath, method, uriVariables, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, returnType); + } +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java new file mode 100644 index 000000000000..150edbb586db --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java @@ -0,0 +1,113 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; +import org.openapitools.client.BaseApi; + +import org.openapitools.client.model.RequiredAndNullable; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.core.io.FileSystemResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class RequiredAndNullableApi extends BaseApi { + + public RequiredAndNullableApi() { + super(new ApiClient()); + } + + public RequiredAndNullableApi(ApiClient apiClient) { + super(apiClient); + } + + /** + * + * + *

    0 - response + * @param requiredAndNullable bodyWithRequiredAndNullableAttributes (required) + * @return RequiredAndNullable + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public RequiredAndNullable requiredAndNullablePost(RequiredAndNullable requiredAndNullable) throws RestClientException { + return requiredAndNullablePostWithHttpInfo(requiredAndNullable).getBody(); + } + + /** + * + * + *

    0 - response + * @param requiredAndNullable bodyWithRequiredAndNullableAttributes (required) + * @return ResponseEntity<RequiredAndNullable> + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public ResponseEntity requiredAndNullablePostWithHttpInfo(RequiredAndNullable requiredAndNullable) throws RestClientException { + Object localVarPostBody = requiredAndNullable; + + // verify the required parameter 'requiredAndNullable' is set + if (requiredAndNullable == null) { + throw new HttpClientErrorException(HttpStatus.BAD_REQUEST, "Missing the required parameter 'requiredAndNullable' when calling requiredAndNullablePost"); + } + + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "application/json" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/requiredAndNullable", HttpMethod.POST, Collections.emptyMap(), localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, localReturnType); + } + + @Override + public ResponseEntity invokeAPI(String url, HttpMethod method, Object request, ParameterizedTypeReference returnType) throws RestClientException { + String localVarPath = url.replace(apiClient.getBasePath(), ""); + Object localVarPostBody = request; + + final Map uriVariables = new HashMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "application/json" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + return apiClient.invokeAPI(localVarPath, method, uriVariables, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, returnType); + } +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/UploadApi.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/UploadApi.java new file mode 100644 index 000000000000..0a144089ca6d --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/UploadApi.java @@ -0,0 +1,150 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; +import org.openapitools.client.BaseApi; + +import java.io.File; +import org.jspecify.annotations.Nullable; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.core.io.FileSystemResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class UploadApi extends BaseApi { + + public UploadApi() { + super(new ApiClient()); + } + + public UploadApi(ApiClient apiClient) { + super(apiClient); + } + + /** + * + * + *

    0 - ok + * @param _file (optional) + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public void uploadFilesPost(List _file) throws RestClientException { + uploadFilesPostWithHttpInfo(_file); + } + + /** + * + * + *

    0 - ok + * @param _file (optional) + * @return ResponseEntity<Void> + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public ResponseEntity uploadFilesPostWithHttpInfo(List _file) throws RestClientException { + Object localVarPostBody = null; + + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + if (_file != null) + localVarFormParams.addAll("file", _file.stream().map(FileSystemResource::new).collect(Collectors.toList())); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "multipart/form-data" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/uploadFiles", HttpMethod.POST, Collections.emptyMap(), localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, localReturnType); + } + /** + * + * + *

    0 - ok + * @param _file (optional) + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public void uploadPost(File _file) throws RestClientException { + uploadPostWithHttpInfo(_file); + } + + /** + * + * + *

    0 - ok + * @param _file (optional) + * @return ResponseEntity<Void> + * @throws RestClientException if an error occurs while attempting to invoke the API + */ + public ResponseEntity uploadPostWithHttpInfo(File _file) throws RestClientException { + Object localVarPostBody = null; + + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + if (_file != null) + localVarFormParams.add("file", new FileSystemResource(_file)); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "multipart/form-data" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/upload", HttpMethod.POST, Collections.emptyMap(), localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, localReturnType); + } + + @Override + public ResponseEntity invokeAPI(String url, HttpMethod method, Object request, ParameterizedTypeReference returnType) throws RestClientException { + String localVarPath = url.replace(apiClient.getBasePath(), ""); + Object localVarPostBody = request; + + final Map uriVariables = new HashMap(); + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders localVarHeaderParams = new HttpHeaders(); + final MultiValueMap localVarCookieParams = new LinkedMultiValueMap(); + final MultiValueMap localVarFormParams = new LinkedMultiValueMap(); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "multipart/form-data" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + return apiClient.invokeAPI(localVarPath, method, uriVariables, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, returnType); + } +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/FileContent.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/FileContent.java new file mode 100644 index 000000000000..5441a7390e50 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/FileContent.java @@ -0,0 +1,183 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import org.jspecify.annotations.Nullable; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * FileContent + */ +@JsonPropertyOrder({ + FileContent.JSON_PROPERTY_NAME, + FileContent.JSON_PROPERTY_SIZE, + FileContent.JSON_PROPERTY_VIRUS_SCAN +}) +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class FileContent { + public static final String JSON_PROPERTY_NAME = "name"; + + private String name; + + public static final String JSON_PROPERTY_SIZE = "size"; + + private @Nullable Integer size; + + /** + * Gets or Sets virusScan + */ + public enum VirusScanEnum { + CLEAN(String.valueOf("clean")), + + DETECTED(String.valueOf("detected")); + + private String value; + + VirusScanEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static VirusScanEnum fromValue(String value) { + for (VirusScanEnum b : VirusScanEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + } + + public static final String JSON_PROPERTY_VIRUS_SCAN = "virusScan"; + + private @Nullable VirusScanEnum virusScan; + + public FileContent() { + } + /** + * Constructor with only readonly parameters + */ + @JsonCreator + public FileContent( + @JsonProperty(JSON_PROPERTY_NAME) String name, + @JsonProperty(JSON_PROPERTY_SIZE) Integer size, + @JsonProperty(JSON_PROPERTY_VIRUS_SCAN) VirusScanEnum virusScan + ) { + this(); + this.name = name; + this.size = size; + this.virusScan = virusScan; + } + + /** + * Get name + * @return name + */ + + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public String getName() { + return name; + } + + + + /** + * Get size + * @return size + */ + + @JsonProperty(value = JSON_PROPERTY_SIZE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getSize() { + return java.util.Optional.ofNullable(size); + } + + + + /** + * Get virusScan + * @return virusScan + */ + + @JsonProperty(value = JSON_PROPERTY_VIRUS_SCAN, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getVirusScan() { + return java.util.Optional.ofNullable(virusScan); + } + + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + FileContent fileContent = (FileContent) o; + return Objects.equals(this.name, fileContent.name) && + Objects.equals(this.size, fileContent.size) && + Objects.equals(this.virusScan, fileContent.virusScan); + } + + @Override + public int hashCode() { + return Objects.hash(name, size, virusScan); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class FileContent {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" size: ").append(toIndentedString(size)).append("\n"); + sb.append(" virusScan: ").append(toIndentedString(virusScan)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } + +} + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/RequiredAndNullable.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/RequiredAndNullable.java new file mode 100644 index 000000000000..460f6e1faa99 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/RequiredAndNullable.java @@ -0,0 +1,243 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * RequiredAndNullable + */ +@JsonPropertyOrder({ + RequiredAndNullable.JSON_PROPERTY_STR, + RequiredAndNullable.JSON_PROPERTY_FILE, + RequiredAndNullable.JSON_PROPERTY_COLOR, + RequiredAndNullable.JSON_PROPERTY_ONLY_REQUIRED, + RequiredAndNullable.JSON_PROPERTY_LIST +}) +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class RequiredAndNullable { + public static final String JSON_PROPERTY_STR = "str"; + + private @Nullable String str; + + public static final String JSON_PROPERTY_FILE = "file"; + + private @Nullable File _file; + + public static final String JSON_PROPERTY_COLOR = "color"; + + private @Nullable String color = "red"; + + public static final String JSON_PROPERTY_ONLY_REQUIRED = "onlyRequired"; + + private String onlyRequired; + + public static final String JSON_PROPERTY_LIST = "list"; + + private @Nullable List _list; + + public RequiredAndNullable() { + } + + public RequiredAndNullable str(@Nullable String str) { + + this.str = str; + return this; + } + + /** + * Get str + * @return str + */ + + @JsonProperty(value = JSON_PROPERTY_STR, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public @Nullable String getStr() { + return str; + } + + + @JsonProperty(value = JSON_PROPERTY_STR, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setStr(@Nullable String str) { + this.str = str; + } + + public RequiredAndNullable _file(@Nullable File _file) { + + this._file = _file; + return this; + } + + /** + * Get _file + * @return _file + */ + + @JsonProperty(value = JSON_PROPERTY_FILE, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public @Nullable File getFile() { + return _file; + } + + + @JsonProperty(value = JSON_PROPERTY_FILE, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setFile(@Nullable File _file) { + this._file = _file; + } + + public RequiredAndNullable color(@Nullable String color) { + + this.color = color; + return this; + } + + /** + * Get color + * @return color + */ + + @JsonProperty(value = JSON_PROPERTY_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public @Nullable String getColor() { + return color; + } + + + @JsonProperty(value = JSON_PROPERTY_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setColor(@Nullable String color) { + this.color = color; + } + + public RequiredAndNullable onlyRequired(String onlyRequired) { + + this.onlyRequired = onlyRequired; + return this; + } + + /** + * Get onlyRequired + * @return onlyRequired + */ + + @JsonProperty(value = JSON_PROPERTY_ONLY_REQUIRED, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public String getOnlyRequired() { + return onlyRequired; + } + + + @JsonProperty(value = JSON_PROPERTY_ONLY_REQUIRED, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setOnlyRequired(String onlyRequired) { + this.onlyRequired = onlyRequired; + } + + public RequiredAndNullable _list(@Nullable List _list) { + + this._list = _list; + return this; + } + + public RequiredAndNullable addListItem(String _listItem) { + if (this._list == null) { + this._list = new ArrayList<>(); + } + this._list.add(_listItem); + return this; + } + + /** + * Get _list + * @return _list + */ + + @JsonProperty(value = JSON_PROPERTY_LIST, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public @Nullable List getList() { + return _list; + } + + + @JsonProperty(value = JSON_PROPERTY_LIST, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setList(@Nullable List _list) { + this._list = _list; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RequiredAndNullable requiredAndNullable = (RequiredAndNullable) o; + return Objects.equals(this.str, requiredAndNullable.str) && + Objects.equals(this._file, requiredAndNullable._file) && + Objects.equals(this.color, requiredAndNullable.color) && + Objects.equals(this.onlyRequired, requiredAndNullable.onlyRequired) && + Objects.equals(this._list, requiredAndNullable._list); + } + + @Override + public int hashCode() { + return Objects.hash(str, _file, color, onlyRequired, _list); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RequiredAndNullable {\n"); + sb.append(" str: ").append(toIndentedString(str)).append("\n"); + sb.append(" _file: ").append(toIndentedString(_file)).append("\n"); + sb.append(" color: ").append(toIndentedString(color)).append("\n"); + sb.append(" onlyRequired: ").append(toIndentedString(onlyRequired)).append("\n"); + sb.append(" _list: ").append(toIndentedString(_list)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } + +} + diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FileApiTest.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FileApiTest.java new file mode 100644 index 000000000000..962e2241ac09 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FileApiTest.java @@ -0,0 +1,54 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import org.openapitools.client.model.FileContent; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.web.client.RestClientException; + +import java.time.LocalDate; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * API tests for FileApi + */ +@Disabled +class FileApiTest { + + private final FileApi api = new FileApi(); + + + /** + * + * + * + * + * @throws RestClientException + * if the Api call fails + */ + @Test + void fileIdGetTest() { + String id = null; + + FileContent response = api.fileIdGet(id); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FooApiTest.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FooApiTest.java new file mode 100644 index 000000000000..9f6ae9ef696a --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FooApiTest.java @@ -0,0 +1,59 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import org.openapitools.client.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.web.client.RestClientException; + +import java.time.LocalDate; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * API tests for FooApi + */ +@Disabled +class FooApiTest { + + private final FooApi api = new FooApi(); + + + /** + * + * + * + * + * @throws RestClientException + * if the Api call fails + */ + @Test + void fooDtParamGetTest() { + java.time.Instant dtParam = null; + java.time.Instant dtQuery = null; + java.time.Instant dtCookie = null; + String color = null; + + Foo response = api.fooDtParamGet(dtParam, dtQuery, dtCookie, color); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java new file mode 100644 index 000000000000..e082ae37e368 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java @@ -0,0 +1,54 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import org.openapitools.client.model.RequiredAndNullable; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.web.client.RestClientException; + +import java.time.LocalDate; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * API tests for RequiredAndNullableApi + */ +@Disabled +class RequiredAndNullableApiTest { + + private final RequiredAndNullableApi api = new RequiredAndNullableApi(); + + + /** + * + * + * + * + * @throws RestClientException + * if the Api call fails + */ + @Test + void requiredAndNullablePostTest() { + RequiredAndNullable requiredAndNullable = null; + + RequiredAndNullable response = api.requiredAndNullablePost(requiredAndNullable); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/UploadApiTest.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/UploadApiTest.java new file mode 100644 index 000000000000..f16fc5bc599c --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/UploadApiTest.java @@ -0,0 +1,72 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import java.io.File; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.web.client.RestClientException; + +import java.time.LocalDate; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * API tests for UploadApi + */ +@Disabled +class UploadApiTest { + + private final UploadApi api = new UploadApi(); + + + /** + * + * + * + * + * @throws RestClientException + * if the Api call fails + */ + @Test + void uploadFilesPostTest() { + List _file = null; + + api.uploadFilesPost(_file); + + // TODO: test validations + } + + /** + * + * + * + * + * @throws RestClientException + * if the Api call fails + */ + @Test + void uploadPostTest() { + File _file = null; + + api.uploadPost(_file); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FileContentTest.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FileContentTest.java new file mode 100644 index 000000000000..ef670ad23315 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FileContentTest.java @@ -0,0 +1,63 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +/** + * Model tests for FileContent + */ +class FileContentTest { + private final FileContent model = new FileContent(); + + /** + * Model tests for FileContent + */ + @Test + void testFileContent() { + // TODO: test FileContent + } + + /** + * Test the property 'name' + */ + @Test + void nameTest() { + // TODO: test name + } + + /** + * Test the property 'size' + */ + @Test + void sizeTest() { + // TODO: test size + } + + /** + * Test the property 'virusScan' + */ + @Test + void virusScanTest() { + // TODO: test virusScan + } + +} diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java new file mode 100644 index 000000000000..d2d8f59cb506 --- /dev/null +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java @@ -0,0 +1,83 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +/** + * Model tests for RequiredAndNullable + */ +class RequiredAndNullableTest { + private final RequiredAndNullable model = new RequiredAndNullable(); + + /** + * Model tests for RequiredAndNullable + */ + @Test + void testRequiredAndNullable() { + // TODO: test RequiredAndNullable + } + + /** + * Test the property 'str' + */ + @Test + void strTest() { + // TODO: test str + } + + /** + * Test the property '_file' + */ + @Test + void _fileTest() { + // TODO: test _file + } + + /** + * Test the property 'color' + */ + @Test + void colorTest() { + // TODO: test color + } + + /** + * Test the property 'onlyRequired' + */ + @Test + void onlyRequiredTest() { + // TODO: test onlyRequired + } + + /** + * Test the property '_list' + */ + @Test + void _listTest() { + // TODO: test _list + } + +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileApi.md b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileApi.md new file mode 100644 index 000000000000..59683371bc55 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileApi.md @@ -0,0 +1,73 @@ +# FileApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**fileIdGet**](FileApi.md#fileIdGet) | **GET** /file/{id} | | + + + +## fileIdGet + +> FileContent fileIdGet(id) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.FileApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + FileApi apiInstance = new FileApi(defaultClient); + String id = "id_example"; // String | + try { + FileContent result = apiInstance.fileIdGet(id); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling FileApi#fileIdGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **id** | **String**| | | + +### Return type + +[**FileContent**](FileContent.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | ok | - | + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileContent.md b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileContent.md new file mode 100644 index 000000000000..5b6654a0bf18 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/FileContent.md @@ -0,0 +1,24 @@ + + +# FileContent + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**name** | **String** | | [readonly] | +|**size** | **Integer** | | [optional] [readonly] | +|**virusScan** | [**VirusScanEnum**](#VirusScanEnum) | | [optional] [readonly] | + + + +## Enum: VirusScanEnum + +| Name | Value | +|---- | -----| +| CLEAN | "clean" | +| DETECTED | "detected" | + + + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/FooApi.md b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/FooApi.md new file mode 100644 index 000000000000..75dd91aeda8e --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/FooApi.md @@ -0,0 +1,79 @@ +# FooApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**fooDtParamGet**](FooApi.md#fooDtParamGet) | **GET** /foo/{dtParam} | | + + + +## fooDtParamGet + +> Foo fooDtParamGet(dtParam, dtQuery, dtCookie, color) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.FooApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + FooApi apiInstance = new FooApi(defaultClient); + java.time.Instant dtParam = new java.time.Instant(); // java.time.Instant | + java.time.Instant dtQuery = new java.time.Instant(); // java.time.Instant | + java.time.Instant dtCookie = new java.time.Instant(); // java.time.Instant | + String color = "red"; // String | + try { + Foo result = apiInstance.fooDtParamGet(dtParam, dtQuery, dtCookie, color); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling FooApi#fooDtParamGet"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **dtParam** | **java.time.Instant**| | [optional] | +| **dtQuery** | **java.time.Instant**| | [optional] | +| **dtCookie** | **java.time.Instant**| | [optional] | +| **color** | **String**| | [optional] [default to red] | + +### Return type + +[**Foo**](Foo.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | response | - | + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullable.md b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullable.md new file mode 100644 index 000000000000..ff4ade0f226d --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullable.md @@ -0,0 +1,17 @@ + + +# RequiredAndNullable + + +## Properties + +| Name | Type | Description | Notes | +|------------ | ------------- | ------------- | -------------| +|**str** | **String** | | | +|**_file** | **File** | | | +|**color** | **String** | | | +|**onlyRequired** | **String** | | | +|**_list** | **List<String>** | | | + + + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullableApi.md b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullableApi.md new file mode 100644 index 000000000000..ada434bf0b9e --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/RequiredAndNullableApi.md @@ -0,0 +1,73 @@ +# RequiredAndNullableApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**requiredAndNullablePost**](RequiredAndNullableApi.md#requiredAndNullablePost) | **POST** /requiredAndNullable | | + + + +## requiredAndNullablePost + +> RequiredAndNullable requiredAndNullablePost(requiredAndNullable) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.RequiredAndNullableApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + RequiredAndNullableApi apiInstance = new RequiredAndNullableApi(defaultClient); + RequiredAndNullable requiredAndNullable = new RequiredAndNullable(); // RequiredAndNullable | bodyWithRequiredAndNullableAttributes + try { + RequiredAndNullable result = apiInstance.requiredAndNullablePost(requiredAndNullable); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling RequiredAndNullableApi#requiredAndNullablePost"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **requiredAndNullable** | [**RequiredAndNullable**](RequiredAndNullable.md)| bodyWithRequiredAndNullableAttributes | | + +### Return type + +[**RequiredAndNullable**](RequiredAndNullable.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | response | - | + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/UploadApi.md b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/UploadApi.md new file mode 100644 index 000000000000..95a6d603d5bf --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/docs/UploadApi.md @@ -0,0 +1,136 @@ +# UploadApi + +All URIs are relative to *http://localhost* + +| Method | HTTP request | Description | +|------------- | ------------- | -------------| +| [**uploadFilesPost**](UploadApi.md#uploadFilesPost) | **POST** /uploadFiles | | +| [**uploadPost**](UploadApi.md#uploadPost) | **POST** /upload | | + + + +## uploadFilesPost + +> uploadFilesPost(_file) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.UploadApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + UploadApi apiInstance = new UploadApi(defaultClient); + List _file = Arrays.asList(); // List | + try { + apiInstance.uploadFilesPost(_file); + } catch (ApiException e) { + System.err.println("Exception when calling UploadApi#uploadFilesPost"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **_file** | **List<File>**| | [optional] | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: multipart/form-data +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | ok | - | + + +## uploadPost + +> uploadPost(_file) + + + +### Example + +```java +// Import classes: +import org.openapitools.client.ApiClient; +import org.openapitools.client.ApiException; +import org.openapitools.client.Configuration; +import org.openapitools.client.models.*; +import org.openapitools.client.api.UploadApi; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("http://localhost"); + + UploadApi apiInstance = new UploadApi(defaultClient); + File _file = new File("/path/to/file"); // File | + try { + apiInstance.uploadPost(_file); + } catch (ApiException e) { + System.err.println("Exception when calling UploadApi#uploadPost"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **_file** | **File**| | [optional] | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: multipart/form-data +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **0** | ok | - | + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ExceptionProvider.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ExceptionProvider.java new file mode 100644 index 000000000000..bdc5d021d34a --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/ExceptionProvider.java @@ -0,0 +1,80 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client; + +import org.springframework.web.client.RestClientException; +import java.text.ParseException; + +/** + * Extension point for customizing exceptions thrown by the generated API client. + *

    + * The default implementation throws {@link RuntimeException}. To use custom exception + * types, implement this interface and pass the instance to + * {@link ApiClient#setExceptionProvider(ExceptionProvider)}. + *

    + *
    {@code
    + * apiClient.setExceptionProvider(new ExceptionProvider() {
    + *     public RuntimeException bearerAuthException() {
    + *         return new MyAuthException("No Bearer authentication configured!");
    + *     }
    + * });
    + * }
    + */ +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public interface ExceptionProvider { + + /** Returns an exception indicating that no Bearer authentication is configured. */ + default RuntimeException bearerAuthException() { + return new RuntimeException("No Bearer authentication configured!"); + } + + /** Returns an exception indicating that no HTTP basic authentication is configured. */ + default RuntimeException httpBasicAuthException() { + return new RuntimeException("No HTTP basic authentication configured!"); + } + + /** Returns an exception indicating that no API key authentication is configured. */ + default RuntimeException apiKeyAuthException() { + return new RuntimeException("No API key authentication configured!"); + } + + /** Returns an exception indicating that no OAuth2 authentication is configured. */ + default RuntimeException oAuth2Exception() { + return new RuntimeException("No OAuth2 authentication configured!"); + } + + /** Wraps a date/time parse exception. */ + default RuntimeException dateTimeException(ParseException e) { + return new RuntimeException(e); + } + + /** Wraps a Jackson serialization/deserialization exception. */ + default RuntimeException jacksonException(Exception e) { + return new RuntimeException(e); + } + + /** + * Returns an exception indicating that the requested authentication scheme is not configured. + * + * @param authName the name of the authentication scheme that could not be found + * @return a {@link RestClientException} describing the missing authentication + */ + default RestClientException undefinedAuthenticationException(String authName) { + return new RestClientException("Authentication undefined: " + authName); + } + + /** The default {@link ExceptionProvider} instance. */ + ExceptionProvider DEFAULT = new ExceptionProvider() {}; + +} \ No newline at end of file diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FileApi.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FileApi.java new file mode 100644 index 000000000000..920e37df185f --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FileApi.java @@ -0,0 +1,123 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; + +import org.openapitools.client.model.FileContent; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Arrays; +import java.util.stream.Collectors; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.reactive.function.client.WebClient.ResponseSpec; +import org.springframework.web.reactive.function.client.WebClientResponseException; +import reactor.core.publisher.Mono; +import reactor.core.publisher.Flux; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class FileApi { + private ApiClient apiClient; + + public FileApi() { + this(new ApiClient()); + } + + public FileApi(ApiClient apiClient) { + this.apiClient = apiClient; + } + + public ApiClient getApiClient() { + return apiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.apiClient = apiClient; + } + + /** + * + * + *

    200 - ok + * @param id The id parameter + * @return FileContent + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec fileIdGetRequestCreation(String id) throws WebClientResponseException { + Object postBody = null; + // verify the required parameter 'id' is set + if (id == null) { + throw new WebClientResponseException("Missing the required parameter 'id' when calling fileIdGet", HttpStatus.BAD_REQUEST.value(), HttpStatus.BAD_REQUEST.getReasonPhrase(), null, null, null); + } + // create path and map variables + final Map pathParams = new HashMap(); + + pathParams.put("id", id); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap(); + final MultiValueMap formParams = new LinkedMultiValueMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/file/{id}", HttpMethod.GET, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

    200 - ok + * @param id The id parameter + * @return FileContent + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono fileIdGet(String id) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return fileIdGetRequestCreation(id).bodyToMono(localVarReturnType); + } + + /** + * + * + *

    200 - ok + * @param id The id parameter + * @return ResponseEntity<FileContent> + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono> fileIdGetWithHttpInfo(String id) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return fileIdGetRequestCreation(id).toEntity(localVarReturnType); + } + + /** + * + * + *

    200 - ok + * @param id The id parameter + * @return ResponseSpec + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec fileIdGetWithResponseSpec(String id) throws WebClientResponseException { + return fileIdGetRequestCreation(id); + } +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FooApi.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FooApi.java new file mode 100644 index 000000000000..152314ac8cd9 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/FooApi.java @@ -0,0 +1,138 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; + +import org.openapitools.client.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Arrays; +import java.util.stream.Collectors; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.reactive.function.client.WebClient.ResponseSpec; +import org.springframework.web.reactive.function.client.WebClientResponseException; +import reactor.core.publisher.Mono; +import reactor.core.publisher.Flux; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class FooApi { + private ApiClient apiClient; + + public FooApi() { + this(new ApiClient()); + } + + public FooApi(ApiClient apiClient) { + this.apiClient = apiClient; + } + + public ApiClient getApiClient() { + return apiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.apiClient = apiClient; + } + + /** + * + * + *

    0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @param color The color parameter + * @return Foo + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec fooDtParamGetRequestCreation(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie, @Nullable String color) throws WebClientResponseException { + Object postBody = null; + // create path and map variables + final Map pathParams = new HashMap(); + + pathParams.put("dtParam", dtParam); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap(); + final MultiValueMap formParams = new LinkedMultiValueMap(); + + localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "dtQuery", dtQuery)); + localVarQueryParams.putAll(apiClient.parameterToMultiValueMap(null, "color", color)); + + cookieParams.putAll(apiClient.parameterToMultiValueMap(null, "dtCookie", dtCookie)); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/foo/{dtParam}", HttpMethod.GET, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

    0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @param color The color parameter + * @return Foo + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono fooDtParamGet(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie, @Nullable String color) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return fooDtParamGetRequestCreation(dtParam, dtQuery, dtCookie, color).bodyToMono(localVarReturnType); + } + + /** + * + * + *

    0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @param color The color parameter + * @return ResponseEntity<Foo> + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono> fooDtParamGetWithHttpInfo(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie, @Nullable String color) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return fooDtParamGetRequestCreation(dtParam, dtQuery, dtCookie, color).toEntity(localVarReturnType); + } + + /** + * + * + *

    0 - response + * @param dtParam The dtParam parameter + * @param dtQuery The dtQuery parameter + * @param dtCookie The dtCookie parameter + * @param color The color parameter + * @return ResponseSpec + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec fooDtParamGetWithResponseSpec(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie, @Nullable String color) throws WebClientResponseException { + return fooDtParamGetRequestCreation(dtParam, dtQuery, dtCookie, color); + } +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java new file mode 100644 index 000000000000..a7cf9f2d8749 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/RequiredAndNullableApi.java @@ -0,0 +1,123 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; + +import org.openapitools.client.model.RequiredAndNullable; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Arrays; +import java.util.stream.Collectors; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.reactive.function.client.WebClient.ResponseSpec; +import org.springframework.web.reactive.function.client.WebClientResponseException; +import reactor.core.publisher.Mono; +import reactor.core.publisher.Flux; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class RequiredAndNullableApi { + private ApiClient apiClient; + + public RequiredAndNullableApi() { + this(new ApiClient()); + } + + public RequiredAndNullableApi(ApiClient apiClient) { + this.apiClient = apiClient; + } + + public ApiClient getApiClient() { + return apiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.apiClient = apiClient; + } + + /** + * + * + *

    0 - response + * @param requiredAndNullable bodyWithRequiredAndNullableAttributes + * @return RequiredAndNullable + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec requiredAndNullablePostRequestCreation(RequiredAndNullable requiredAndNullable) throws WebClientResponseException { + Object postBody = requiredAndNullable; + // verify the required parameter 'requiredAndNullable' is set + if (requiredAndNullable == null) { + throw new WebClientResponseException("Missing the required parameter 'requiredAndNullable' when calling requiredAndNullablePost", HttpStatus.BAD_REQUEST.value(), HttpStatus.BAD_REQUEST.getReasonPhrase(), null, null, null); + } + // create path and map variables + final Map pathParams = new HashMap(); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap(); + final MultiValueMap formParams = new LinkedMultiValueMap(); + + final String[] localVarAccepts = { + "application/json" + }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "application/json" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/requiredAndNullable", HttpMethod.POST, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

    0 - response + * @param requiredAndNullable bodyWithRequiredAndNullableAttributes + * @return RequiredAndNullable + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono requiredAndNullablePost(RequiredAndNullable requiredAndNullable) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return requiredAndNullablePostRequestCreation(requiredAndNullable).bodyToMono(localVarReturnType); + } + + /** + * + * + *

    0 - response + * @param requiredAndNullable bodyWithRequiredAndNullableAttributes + * @return ResponseEntity<RequiredAndNullable> + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono> requiredAndNullablePostWithHttpInfo(RequiredAndNullable requiredAndNullable) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return requiredAndNullablePostRequestCreation(requiredAndNullable).toEntity(localVarReturnType); + } + + /** + * + * + *

    0 - response + * @param requiredAndNullable bodyWithRequiredAndNullableAttributes + * @return ResponseSpec + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec requiredAndNullablePostWithResponseSpec(RequiredAndNullable requiredAndNullable) throws WebClientResponseException { + return requiredAndNullablePostRequestCreation(requiredAndNullable); + } +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/UploadApi.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/UploadApi.java new file mode 100644 index 000000000000..025f9882cf82 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/api/UploadApi.java @@ -0,0 +1,187 @@ +package org.openapitools.client.api; + +import org.openapitools.client.ApiClient; + +import java.io.File; +import org.jspecify.annotations.Nullable; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Arrays; +import java.util.stream.Collectors; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.reactive.function.client.WebClient.ResponseSpec; +import org.springframework.web.reactive.function.client.WebClientResponseException; +import reactor.core.publisher.Mono; +import reactor.core.publisher.Flux; + +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class UploadApi { + private ApiClient apiClient; + + public UploadApi() { + this(new ApiClient()); + } + + public UploadApi(ApiClient apiClient) { + this.apiClient = apiClient; + } + + public ApiClient getApiClient() { + return apiClient; + } + + public void setApiClient(ApiClient apiClient) { + this.apiClient = apiClient; + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec uploadFilesPostRequestCreation(@Nullable List _file) throws WebClientResponseException { + Object postBody = null; + // create path and map variables + final Map pathParams = new HashMap(); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap(); + final MultiValueMap formParams = new LinkedMultiValueMap(); + + if (_file != null) + formParams.addAll("file", _file.stream().map(FileSystemResource::new).collect(Collectors.toList())); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "multipart/form-data" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/uploadFiles", HttpMethod.POST, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono uploadFilesPost(@Nullable List _file) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return uploadFilesPostRequestCreation(_file).bodyToMono(localVarReturnType); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono> uploadFilesPostWithHttpInfo(@Nullable List _file) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return uploadFilesPostRequestCreation(_file).toEntity(localVarReturnType); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @return ResponseSpec + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec uploadFilesPostWithResponseSpec(@Nullable List _file) throws WebClientResponseException { + return uploadFilesPostRequestCreation(_file); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + private ResponseSpec uploadPostRequestCreation(@Nullable File _file) throws WebClientResponseException { + Object postBody = null; + // create path and map variables + final Map pathParams = new HashMap(); + + final MultiValueMap localVarQueryParams = new LinkedMultiValueMap(); + final HttpHeaders headerParams = new HttpHeaders(); + final MultiValueMap cookieParams = new LinkedMultiValueMap(); + final MultiValueMap formParams = new LinkedMultiValueMap(); + + if (_file != null) + formParams.add("file", new FileSystemResource(_file)); + + final String[] localVarAccepts = { }; + final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); + final String[] localVarContentTypes = { + "multipart/form-data" + }; + final MediaType localVarContentType = apiClient.selectHeaderContentType(localVarContentTypes); + + String[] localVarAuthNames = new String[] { }; + + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return apiClient.invokeAPI("/upload", HttpMethod.POST, pathParams, localVarQueryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono uploadPost(@Nullable File _file) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return uploadPostRequestCreation(_file).bodyToMono(localVarReturnType); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public Mono> uploadPostWithHttpInfo(@Nullable File _file) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + return uploadPostRequestCreation(_file).toEntity(localVarReturnType); + } + + /** + * + * + *

    0 - ok + * @param _file The _file parameter + * @return ResponseSpec + * @throws WebClientResponseException if an error occurs while attempting to invoke the API + */ + public ResponseSpec uploadPostWithResponseSpec(@Nullable File _file) throws WebClientResponseException { + return uploadPostRequestCreation(_file); + } +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/FileContent.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/FileContent.java new file mode 100644 index 000000000000..876fb3c4ef66 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/FileContent.java @@ -0,0 +1,182 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import org.jspecify.annotations.Nullable; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * FileContent + */ +@JsonPropertyOrder({ + FileContent.JSON_PROPERTY_NAME, + FileContent.JSON_PROPERTY_SIZE, + FileContent.JSON_PROPERTY_VIRUS_SCAN +}) +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class FileContent { + public static final String JSON_PROPERTY_NAME = "name"; + + private String name; + + public static final String JSON_PROPERTY_SIZE = "size"; + + private @Nullable Integer size; + + /** + * Gets or Sets virusScan + */ + public enum VirusScanEnum { + CLEAN(String.valueOf("clean")), + + DETECTED(String.valueOf("detected")); + + private String value; + + VirusScanEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static VirusScanEnum fromValue(String value) { + for (VirusScanEnum b : VirusScanEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + } + + public static final String JSON_PROPERTY_VIRUS_SCAN = "virusScan"; + + private @Nullable VirusScanEnum virusScan; + + public FileContent() { + } + /** + * Constructor with only readonly parameters + */ + @JsonCreator + public FileContent( + @JsonProperty(JSON_PROPERTY_NAME) String name, + @JsonProperty(JSON_PROPERTY_SIZE) Integer size, + @JsonProperty(JSON_PROPERTY_VIRUS_SCAN) VirusScanEnum virusScan + ) { + this(); + this.name = name; + this.size = size; + this.virusScan = virusScan; + } + + /** + * Get name + * @return name + */ + + @JsonProperty(value = JSON_PROPERTY_NAME, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public String getName() { + return name; + } + + + + /** + * Get size + * @return size + */ + + @JsonProperty(value = JSON_PROPERTY_SIZE, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getSize() { + return java.util.Optional.ofNullable(size); + } + + + + /** + * Get virusScan + * @return virusScan + */ + + @JsonProperty(value = JSON_PROPERTY_VIRUS_SCAN, required = false) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public java.util.Optional getVirusScan() { + return java.util.Optional.ofNullable(virusScan); + } + + + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + FileContent fileContent = (FileContent) o; + return Objects.equals(this.name, fileContent.name) && + Objects.equals(this.size, fileContent.size) && + Objects.equals(this.virusScan, fileContent.virusScan); + } + + @Override + public int hashCode() { + return Objects.hash(name, size, virusScan); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class FileContent {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" size: ").append(toIndentedString(size)).append("\n"); + sb.append(" virusScan: ").append(toIndentedString(virusScan)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } + +} + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/RequiredAndNullable.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/RequiredAndNullable.java new file mode 100644 index 000000000000..d4d90f1513ce --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/main/java/org/openapitools/client/model/RequiredAndNullable.java @@ -0,0 +1,242 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * RequiredAndNullable + */ +@JsonPropertyOrder({ + RequiredAndNullable.JSON_PROPERTY_STR, + RequiredAndNullable.JSON_PROPERTY_FILE, + RequiredAndNullable.JSON_PROPERTY_COLOR, + RequiredAndNullable.JSON_PROPERTY_ONLY_REQUIRED, + RequiredAndNullable.JSON_PROPERTY_LIST +}) +@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class RequiredAndNullable { + public static final String JSON_PROPERTY_STR = "str"; + + private @Nullable String str; + + public static final String JSON_PROPERTY_FILE = "file"; + + private @Nullable File _file; + + public static final String JSON_PROPERTY_COLOR = "color"; + + private @Nullable String color = "red"; + + public static final String JSON_PROPERTY_ONLY_REQUIRED = "onlyRequired"; + + private String onlyRequired; + + public static final String JSON_PROPERTY_LIST = "list"; + + private @Nullable List _list; + + public RequiredAndNullable() { + } + + public RequiredAndNullable str(@Nullable String str) { + + this.str = str; + return this; + } + + /** + * Get str + * @return str + */ + + @JsonProperty(value = JSON_PROPERTY_STR, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public @Nullable String getStr() { + return str; + } + + + @JsonProperty(value = JSON_PROPERTY_STR, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setStr(@Nullable String str) { + this.str = str; + } + + public RequiredAndNullable _file(@Nullable File _file) { + + this._file = _file; + return this; + } + + /** + * Get _file + * @return _file + */ + + @JsonProperty(value = JSON_PROPERTY_FILE, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public @Nullable File getFile() { + return _file; + } + + + @JsonProperty(value = JSON_PROPERTY_FILE, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setFile(@Nullable File _file) { + this._file = _file; + } + + public RequiredAndNullable color(@Nullable String color) { + + this.color = color; + return this; + } + + /** + * Get color + * @return color + */ + + @JsonProperty(value = JSON_PROPERTY_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public @Nullable String getColor() { + return color; + } + + + @JsonProperty(value = JSON_PROPERTY_COLOR, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setColor(@Nullable String color) { + this.color = color; + } + + public RequiredAndNullable onlyRequired(String onlyRequired) { + + this.onlyRequired = onlyRequired; + return this; + } + + /** + * Get onlyRequired + * @return onlyRequired + */ + + @JsonProperty(value = JSON_PROPERTY_ONLY_REQUIRED, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public String getOnlyRequired() { + return onlyRequired; + } + + + @JsonProperty(value = JSON_PROPERTY_ONLY_REQUIRED, required = true) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setOnlyRequired(String onlyRequired) { + this.onlyRequired = onlyRequired; + } + + public RequiredAndNullable _list(@Nullable List _list) { + + this._list = _list; + return this; + } + + public RequiredAndNullable addListItem(String _listItem) { + if (this._list == null) { + this._list = new ArrayList<>(); + } + this._list.add(_listItem); + return this; + } + + /** + * Get _list + * @return _list + */ + + @JsonProperty(value = JSON_PROPERTY_LIST, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + + public @Nullable List getList() { + return _list; + } + + + @JsonProperty(value = JSON_PROPERTY_LIST, required = false) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public void setList(@Nullable List _list) { + this._list = _list; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RequiredAndNullable requiredAndNullable = (RequiredAndNullable) o; + return Objects.equals(this.str, requiredAndNullable.str) && + Objects.equals(this._file, requiredAndNullable._file) && + Objects.equals(this.color, requiredAndNullable.color) && + Objects.equals(this.onlyRequired, requiredAndNullable.onlyRequired) && + Objects.equals(this._list, requiredAndNullable._list); + } + + @Override + public int hashCode() { + return Objects.hash(str, _file, color, onlyRequired, _list); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RequiredAndNullable {\n"); + sb.append(" str: ").append(toIndentedString(str)).append("\n"); + sb.append(" _file: ").append(toIndentedString(_file)).append("\n"); + sb.append(" color: ").append(toIndentedString(color)).append("\n"); + sb.append(" onlyRequired: ").append(toIndentedString(onlyRequired)).append("\n"); + sb.append(" _list: ").append(toIndentedString(_list)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } + +} + diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FileApiTest.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FileApiTest.java new file mode 100644 index 000000000000..ce47d6b18f53 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FileApiTest.java @@ -0,0 +1,50 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import org.openapitools.client.model.FileContent; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * API tests for FileApi + */ +@Disabled +public class FileApiTest { + + private final FileApi api = new FileApi(); + + + /** + * + * + * + */ + @Test + public void fileIdGetTest() { + // uncomment below to test the function + //String id = null; + //FileContent response = api.fileIdGet(id).block(); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FooApiTest.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FooApiTest.java new file mode 100644 index 000000000000..70ca7578b7f6 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/FooApiTest.java @@ -0,0 +1,55 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import org.openapitools.client.model.Foo; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * API tests for FooApi + */ +@Disabled +public class FooApiTest { + + private final FooApi api = new FooApi(); + + + /** + * + * + * + */ + @Test + public void fooDtParamGetTest() { + // uncomment below to test the function + //java.time.Instant dtParam = null; + //java.time.Instant dtQuery = null; + //java.time.Instant dtCookie = null; + //String color = null; + //Foo response = api.fooDtParamGet(dtParam, dtQuery, dtCookie, color).block(); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java new file mode 100644 index 000000000000..5adf56d29694 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java @@ -0,0 +1,50 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import org.openapitools.client.model.RequiredAndNullable; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * API tests for RequiredAndNullableApi + */ +@Disabled +public class RequiredAndNullableApiTest { + + private final RequiredAndNullableApi api = new RequiredAndNullableApi(); + + + /** + * + * + * + */ + @Test + public void requiredAndNullablePostTest() { + // uncomment below to test the function + //RequiredAndNullable requiredAndNullable = null; + //RequiredAndNullable response = api.requiredAndNullablePost(requiredAndNullable).block(); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/UploadApiTest.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/UploadApiTest.java new file mode 100644 index 000000000000..d5acafc244df --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/api/UploadApiTest.java @@ -0,0 +1,65 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.api; + +import java.io.File; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * API tests for UploadApi + */ +@Disabled +public class UploadApiTest { + + private final UploadApi api = new UploadApi(); + + + /** + * + * + * + */ + @Test + public void uploadFilesPostTest() { + // uncomment below to test the function + //List _file = null; + //api.uploadFilesPost(_file).block(); + + // TODO: test validations + } + + /** + * + * + * + */ + @Test + public void uploadPostTest() { + // uncomment below to test the function + //File _file = null; + //api.uploadPost(_file).block(); + + // TODO: test validations + } + +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FileContentTest.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FileContentTest.java new file mode 100644 index 000000000000..ef670ad23315 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/FileContentTest.java @@ -0,0 +1,63 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +/** + * Model tests for FileContent + */ +class FileContentTest { + private final FileContent model = new FileContent(); + + /** + * Model tests for FileContent + */ + @Test + void testFileContent() { + // TODO: test FileContent + } + + /** + * Test the property 'name' + */ + @Test + void nameTest() { + // TODO: test name + } + + /** + * Test the property 'size' + */ + @Test + void sizeTest() { + // TODO: test size + } + + /** + * Test the property 'virusScan' + */ + @Test + void virusScanTest() { + // TODO: test virusScan + } + +} diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java new file mode 100644 index 000000000000..d2d8f59cb506 --- /dev/null +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java @@ -0,0 +1,83 @@ +/* + * jspecify + * test fully qualified name and jspecify + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package org.openapitools.client.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +/** + * Model tests for RequiredAndNullable + */ +class RequiredAndNullableTest { + private final RequiredAndNullable model = new RequiredAndNullable(); + + /** + * Model tests for RequiredAndNullable + */ + @Test + void testRequiredAndNullable() { + // TODO: test RequiredAndNullable + } + + /** + * Test the property 'str' + */ + @Test + void strTest() { + // TODO: test str + } + + /** + * Test the property '_file' + */ + @Test + void _fileTest() { + // TODO: test _file + } + + /** + * Test the property 'color' + */ + @Test + void colorTest() { + // TODO: test color + } + + /** + * Test the property 'onlyRequired' + */ + @Test + void onlyRequiredTest() { + // TODO: test onlyRequired + } + + /** + * Test the property '_list' + */ + @Test + void _listTest() { + // TODO: test _list + } + +} diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/RequiredAndNullableApi.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/RequiredAndNullableApi.java new file mode 100644 index 000000000000..916596c41adb --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/RequiredAndNullableApi.java @@ -0,0 +1,83 @@ +/* + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.26.0-SNAPSHOT). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.api; + +import org.openapitools.model.RequiredAndNullable; +import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.multipart.MultipartFile; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.*; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import jakarta.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +@Validated +@Tag(name = "requiredAndNullable", description = "requiredAndNullable") +public interface RequiredAndNullableApi { + + default Optional getRequest() { + return Optional.empty(); + } + + String PATH_REQUIRED_AND_NULLABLE_POST = "/requiredAndNullable"; + /** + * POST /requiredAndNullable + * + * @param requiredAndNullable bodyWithRequiredAndNullableAttributes (required) + * @return response (status code 200) + */ + @Operation( + operationId = "requiredAndNullablePost", + tags = { "requiredAndNullable" }, + responses = { + @ApiResponse(responseCode = "default", description = "response", content = { + @Content(mediaType = "application/json", schema = @Schema(implementation = RequiredAndNullable.class)) + }) + } + ) + @RequestMapping( + method = RequestMethod.POST, + value = RequiredAndNullableApi.PATH_REQUIRED_AND_NULLABLE_POST, + produces = { "application/json" }, + consumes = { "application/json" } + ) + default ResponseEntity requiredAndNullablePost( + @Parameter(name = "RequiredAndNullable", description = "bodyWithRequiredAndNullableAttributes", required = true) @Valid @RequestBody RequiredAndNullable requiredAndNullable + ) { + getRequest().ifPresent(request -> { + for (MediaType mediaType: MediaType.parseMediaTypes(request.getHeader("Accept"))) { + if (mediaType.isCompatibleWith(MediaType.valueOf("application/json"))) { + String exampleString = "{ \"str\" : \"str\", \"file\" : \"\", \"color\" : \"red\", \"onlyRequired\" : \"onlyRequired\", \"list\" : [ \"list\", \"list\" ] }"; + ApiUtil.setExampleResponse(request, "application/json", exampleString); + break; + } + } + }); + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + +} diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadFilesApi.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadFilesApi.java new file mode 100644 index 000000000000..ee6ac46ca176 --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/api/UploadFilesApi.java @@ -0,0 +1,71 @@ +/* + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (7.26.0-SNAPSHOT). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +package org.openapitools.api; + +import org.jspecify.annotations.Nullable; +import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.multipart.MultipartFile; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.*; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import jakarta.annotation.Generated; + +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +@Validated +@Tag(name = "upload", description = "upload") +public interface UploadFilesApi { + + default Optional getRequest() { + return Optional.empty(); + } + + String PATH_UPLOAD_FILES_POST = "/uploadFiles"; + /** + * POST /uploadFiles + * + * @param file (optional) + * @return ok (status code 200) + */ + @Operation( + operationId = "uploadFilesPost", + tags = { "upload" }, + responses = { + @ApiResponse(responseCode = "default", description = "ok") + } + ) + @RequestMapping( + method = RequestMethod.POST, + value = UploadFilesApi.PATH_UPLOAD_FILES_POST, + consumes = { "multipart/form-data" } + ) + default ResponseEntity uploadFilesPost( + @Parameter(name = "file", description = "") @RequestPart(value = "file", required = false) List file + ) { + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + + } + +} diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/FileContent.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/FileContent.java new file mode 100644 index 000000000000..99b3ddefe9dc --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/FileContent.java @@ -0,0 +1,273 @@ +package org.openapitools.model; + +import java.net.URI; +import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; +import jakarta.validation.Valid; +import jakarta.validation.constraints.*; +import tools.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import tools.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import tools.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import io.swagger.v3.oas.annotations.media.Schema; + +import jakarta.xml.bind.annotation.*; + +import java.util.*; +import jakarta.annotation.Generated; + +/** + * FileContent + */ + +@JacksonXmlRootElement(localName = "FileContent") +@XmlRootElement(name = "FileContent") +@XmlAccessorType(XmlAccessType.FIELD) +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class FileContent { + + private String name; + + private @Nullable Integer size; + + /** + * Gets or Sets virusScan + */ + public enum VirusScanEnum { + CLEAN("clean"), + + DETECTED("detected"); + + private final String value; + + VirusScanEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + @JsonCreator + public static VirusScanEnum fromValue(String value) { + for (VirusScanEnum b : VirusScanEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + } + + private @Nullable VirusScanEnum virusScan; + + public FileContent() { + super(); + } + + /** + * Constructor with only required parameters + */ + public FileContent(String name) { + this.name = name; + } + + /** + * Constructor with all args parameters + */ + public FileContent(String name, @Nullable Integer size, @Nullable VirusScanEnum virusScan) { + this.name = name; + this.size = size; + this.virusScan = virusScan; + } + + public FileContent name(String name) { + this.name = name; + return this; + } + + /** + * Get name + * @return name + */ + + @Schema(name = "name", accessMode = Schema.AccessMode.READ_ONLY, requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("name") + @JacksonXmlProperty(localName = "name") + @XmlElement(name = "name") + public String getName() { + return name; + } + + @JsonProperty("name") + @JacksonXmlProperty(localName = "name") + public void setName(String name) { + this.name = name; + } + + public FileContent size(@Nullable Integer size) { + this.size = size; + return this; + } + + /** + * Get size + * @return size + */ + + @Schema(name = "size", accessMode = Schema.AccessMode.READ_ONLY, requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("size") + @JacksonXmlProperty(localName = "size") + @XmlElement(name = "size") + public java.util.Optional getSize() { + return java.util.Optional.ofNullable(size); + } + + @JsonProperty("size") + @JacksonXmlProperty(localName = "size") + public void setSize(@Nullable Integer size) { + this.size = size; + } + + public FileContent virusScan(@Nullable VirusScanEnum virusScan) { + this.virusScan = virusScan; + return this; + } + + /** + * Get virusScan + * @return virusScan + */ + + @Schema(name = "virusScan", accessMode = Schema.AccessMode.READ_ONLY, requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @JsonProperty("virusScan") + @JacksonXmlProperty(localName = "virusScan") + @XmlElement(name = "virusScan") + public java.util.Optional getVirusScan() { + return java.util.Optional.ofNullable(virusScan); + } + + @JsonProperty("virusScan") + @JacksonXmlProperty(localName = "virusScan") + public void setVirusScan(@Nullable VirusScanEnum virusScan) { + this.virusScan = virusScan; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + FileContent fileContent = (FileContent) o; + return Objects.equals(this.name, fileContent.name) && + Objects.equals(this.size, fileContent.size) && + Objects.equals(this.virusScan, fileContent.virusScan); + } + + @Override + public int hashCode() { + return Objects.hash(name, size, virusScan); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class FileContent {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" size: ").append(toIndentedString(size)).append("\n"); + sb.append(" virusScan: ").append(toIndentedString(virusScan)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(@Nullable Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } + + public static class Builder { + + private FileContent instance; + + public Builder() { + this(new FileContent()); + } + + protected Builder(FileContent instance) { + this.instance = instance; + } + + protected Builder copyOf(FileContent value) { + this.instance.setName(value.name); + this.instance.setSize(value.size); + this.instance.setVirusScan(value.virusScan); + return this; + } + + public FileContent.Builder name(String name) { + this.instance.name(name); + return this; + } + + public FileContent.Builder size(@Nullable Integer size) { + this.instance.size(size); + return this; + } + + public FileContent.Builder virusScan(@Nullable VirusScanEnum virusScan) { + this.instance.virusScan(virusScan); + return this; + } + + /** + * returns a built FileContent instance. + * + * The builder is not reusable (NullPointerException) + */ + public FileContent build() { + try { + return this.instance; + } finally { + // ensure that this.instance is not reused + this.instance = null; + } + } + + @Override + public String toString() { + return getClass() + "=(" + instance + ")"; + } + } + + /** + * Create a builder with no initialized field (except for the default values). + */ + public static FileContent.Builder builder() { + return new FileContent.Builder(); + } + + /** + * Create a builder with a shallow copy of this instance. + */ + public FileContent.Builder toBuilder() { + FileContent.Builder builder = new FileContent.Builder(); + return builder.copyOf(this); + } + +} + diff --git a/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/RequiredAndNullable.java b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/RequiredAndNullable.java new file mode 100644 index 000000000000..92041c61b6df --- /dev/null +++ b/samples/openapi3/server/petstore/springboot-4-jspecify-optional-getters/src/main/java/org/openapitools/model/RequiredAndNullable.java @@ -0,0 +1,313 @@ +package 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.Arrays; +import java.util.List; +import org.jspecify.annotations.Nullable; +import java.time.OffsetDateTime; +import jakarta.validation.Valid; +import jakarta.validation.constraints.*; +import tools.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import tools.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import tools.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import io.swagger.v3.oas.annotations.media.Schema; + +import jakarta.xml.bind.annotation.*; + +import java.util.*; +import jakarta.annotation.Generated; + +/** + * RequiredAndNullable + */ + +@JacksonXmlRootElement(localName = "RequiredAndNullable") +@XmlRootElement(name = "RequiredAndNullable") +@XmlAccessorType(XmlAccessType.FIELD) +@Generated(value = "org.openapitools.codegen.languages.SpringCodegen", comments = "Generator version: 7.26.0-SNAPSHOT") +public class RequiredAndNullable { + + private @Nullable String str = null; + + private org.springframework.core.io.@Nullable Resource file = null; + + private @Nullable String color = null; + + private String onlyRequired; + + private @Nullable List _list; + + public RequiredAndNullable() { + super(); + } + + /** + * Constructor with only required parameters and all parameters + */ + public RequiredAndNullable(@Nullable String str, org.springframework.core.io.@Nullable Resource file, @Nullable String color, String onlyRequired, @Nullable List _list) { + this.str = str; + this.file = file; + this.color = color; + this.onlyRequired = onlyRequired; + this._list = _list; + } + + public RequiredAndNullable str(@Nullable String str) { + this.str = str; + return this; + } + + /** + * Get str + * @return str + */ + + @Schema(name = "str", requiredMode = Schema.RequiredMode.REQUIRED, nullable = true) + @JsonProperty("str") + @JacksonXmlProperty(localName = "str") + @XmlElement(name = "str") + public @Nullable String getStr() { + return str; + } + + @JsonProperty("str") + @JacksonXmlProperty(localName = "str") + public void setStr(@Nullable String str) { + this.str = str; + } + + public RequiredAndNullable file(org.springframework.core.io.@Nullable Resource file) { + this.file = file; + return this; + } + + /** + * Get file + * @return file + */ + @Valid + @Schema(name = "file", requiredMode = Schema.RequiredMode.REQUIRED, nullable = true) + @JsonProperty("file") + @JacksonXmlProperty(localName = "file") + @XmlElement(name = "file") + public org.springframework.core.io.@Nullable Resource getFile() { + return file; + } + + @JsonProperty("file") + @JacksonXmlProperty(localName = "file") + public void setFile(org.springframework.core.io.@Nullable Resource file) { + this.file = file; + } + + public RequiredAndNullable color(@Nullable String color) { + this.color = color; + return this; + } + + /** + * Get color + * @return color + */ + + @Schema(name = "color", requiredMode = Schema.RequiredMode.REQUIRED, nullable = true) + @JsonProperty("color") + @JacksonXmlProperty(localName = "color") + @XmlElement(name = "color") + public @Nullable String getColor() { + return color; + } + + @JsonProperty("color") + @JacksonXmlProperty(localName = "color") + public void setColor(@Nullable String color) { + this.color = color; + } + + public RequiredAndNullable onlyRequired(String onlyRequired) { + this.onlyRequired = onlyRequired; + return this; + } + + /** + * Get onlyRequired + * @return onlyRequired + */ + @NotNull + @Schema(name = "onlyRequired", requiredMode = Schema.RequiredMode.REQUIRED) + @JsonProperty("onlyRequired") + @JacksonXmlProperty(localName = "onlyRequired") + @XmlElement(name = "onlyRequired") + public String getOnlyRequired() { + return onlyRequired; + } + + @JsonProperty("onlyRequired") + @JacksonXmlProperty(localName = "onlyRequired") + public void setOnlyRequired(String onlyRequired) { + this.onlyRequired = onlyRequired; + } + + public RequiredAndNullable _list(@Nullable List _list) { + this._list = _list; + return this; + } + + public RequiredAndNullable addListItem(String _listItem) { + if (this._list == null) { + this._list = new ArrayList<>(); + } + this._list.add(_listItem); + return this; + } + + /** + * Get _list + * @return _list + */ + + @Schema(name = "list", requiredMode = Schema.RequiredMode.REQUIRED, nullable = true) + @JsonProperty("list") + @JacksonXmlProperty(localName = "list") + @JacksonXmlElementWrapper(useWrapping = false) + @XmlElement(name = "list") + public @Nullable List getList() { + return _list; + } + + @JsonProperty("list") + @JacksonXmlProperty(localName = "list") + @JacksonXmlElementWrapper(useWrapping = false) + public void setList(@Nullable List _list) { + this._list = _list; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RequiredAndNullable requiredAndNullable = (RequiredAndNullable) o; + return Objects.equals(this.str, requiredAndNullable.str) && + Objects.equals(this.file, requiredAndNullable.file) && + Objects.equals(this.color, requiredAndNullable.color) && + Objects.equals(this.onlyRequired, requiredAndNullable.onlyRequired) && + Objects.equals(this._list, requiredAndNullable._list); + } + + @Override + public int hashCode() { + return Objects.hash(str, file, color, onlyRequired, _list); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class RequiredAndNullable {\n"); + sb.append(" str: ").append(toIndentedString(str)).append("\n"); + sb.append(" file: ").append(toIndentedString(file)).append("\n"); + sb.append(" color: ").append(toIndentedString(color)).append("\n"); + sb.append(" onlyRequired: ").append(toIndentedString(onlyRequired)).append("\n"); + sb.append(" _list: ").append(toIndentedString(_list)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(@Nullable Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } + + public static class Builder { + + private RequiredAndNullable instance; + + public Builder() { + this(new RequiredAndNullable()); + } + + protected Builder(RequiredAndNullable instance) { + this.instance = instance; + } + + protected Builder copyOf(RequiredAndNullable value) { + this.instance.setStr(value.str); + this.instance.setFile(value.file); + this.instance.setColor(value.color); + this.instance.setOnlyRequired(value.onlyRequired); + this.instance.setList(value._list); + return this; + } + + public RequiredAndNullable.Builder str(@Nullable String str) { + this.instance.str(str); + return this; + } + + public RequiredAndNullable.Builder file(org.springframework.core.io.@Nullable Resource file) { + this.instance.file(file); + return this; + } + + public RequiredAndNullable.Builder color(@Nullable String color) { + this.instance.color(color); + return this; + } + + public RequiredAndNullable.Builder onlyRequired(String onlyRequired) { + this.instance.onlyRequired(onlyRequired); + return this; + } + + public RequiredAndNullable.Builder _list(@Nullable List _list) { + this.instance._list(_list); + return this; + } + + /** + * returns a built RequiredAndNullable instance. + * + * The builder is not reusable (NullPointerException) + */ + public RequiredAndNullable build() { + try { + return this.instance; + } finally { + // ensure that this.instance is not reused + this.instance = null; + } + } + + @Override + public String toString() { + return getClass() + "=(" + instance + ")"; + } + } + + /** + * Create a builder with no initialized field (except for the default values). + */ + public static RequiredAndNullable.Builder builder() { + return new RequiredAndNullable.Builder(); + } + + /** + * Create a builder with a shallow copy of this instance. + */ + public RequiredAndNullable.Builder toBuilder() { + RequiredAndNullable.Builder builder = new RequiredAndNullable.Builder(); + return builder.copyOf(this); + } + +} + From 4e1abb85861d0d4fc98e7e251b4726e5600164f6 Mon Sep 17 00:00:00 2001 From: Jorge Date: Wed, 2 Sep 2026 16:43:35 +0200 Subject: [PATCH 13/15] docs: add new PHP keywords to documentation --- docs/generators/cpp-boost-beast-client.md | 52 ++++++++++++++--------- docs/generators/go-gin-server.md | 2 +- docs/generators/go.md | 1 + docs/generators/groovy.md | 1 - docs/generators/java-camel.md | 17 +++++--- docs/generators/java-dubbo.md | 1 - docs/generators/java-helidon-client.md | 1 - docs/generators/java-helidon-server.md | 1 - docs/generators/java-inflector.md | 1 - docs/generators/java-micronaut-client.md | 1 - docs/generators/java-micronaut-server.md | 1 - docs/generators/java-microprofile.md | 1 - docs/generators/java-msf4j.md | 1 - docs/generators/java-pkmst.md | 1 - docs/generators/java-play-framework.md | 1 - docs/generators/java-undertow-server.md | 1 - docs/generators/java-vertx-web.md | 2 +- docs/generators/java-vertx.md | 1 - docs/generators/java-wiremock.md | 1 - docs/generators/java.md | 1 - docs/generators/jaxrs-cxf-cdi.md | 2 +- docs/generators/jaxrs-cxf-client.md | 1 - docs/generators/jaxrs-cxf-extended.md | 1 - docs/generators/jaxrs-cxf.md | 1 - docs/generators/jaxrs-jersey.md | 1 - docs/generators/jaxrs-resteasy-eap.md | 1 - docs/generators/jaxrs-resteasy.md | 1 - docs/generators/jaxrs-spec.md | 2 +- docs/generators/kotlin-spring.md | 13 ++++-- docs/generators/kotlin.md | 5 ++- docs/generators/php-dt.md | 5 +++ docs/generators/php-flight.md | 5 +++ docs/generators/php-laravel.md | 5 +++ docs/generators/php-lumen.md | 5 +++ docs/generators/php-mezzio-ph.md | 5 +++ docs/generators/php-nextgen.md | 5 +++ docs/generators/php-slim4.md | 5 +++ docs/generators/php.md | 5 +++ docs/generators/python-pydantic-v1.md | 2 +- docs/generators/python.md | 23 +++++++++- docs/generators/scala-sttp4-jsoniter.md | 2 +- docs/generators/spring.md | 17 +++++--- docs/generators/typescript-angular.md | 4 +- docs/generators/typescript-axios.md | 2 +- docs/generators/typescript-fetch.md | 1 + 45 files changed, 143 insertions(+), 65 deletions(-) diff --git a/docs/generators/cpp-boost-beast-client.md b/docs/generators/cpp-boost-beast-client.md index 32e0abea44f8..657d1c9131b3 100644 --- a/docs/generators/cpp-boost-beast-client.md +++ b/docs/generators/cpp-boost-beast-client.md @@ -19,8 +19,18 @@ These options may be applied as additional-properties (cli) or configOptions (pl | Option | Description | Values | Default | | ------ | ----------- | ------ | ------- | |apiPackage|C++ namespace for apis (convention: name.space.api).| |org.openapitools.client.api| +|compileWithValidation|Emit schema-validation IR and kValidateOnDecode=true in generated ValidationTypes.h (default). Set to false to omit the IR for high-throughput clients. Representation diagnostics (non-finite destinations, integer range, required properties) remain active.| |true| +|exportMacro|C++ export macro placed before public classes and functions. When non-empty, ApiExport.h is generated for Windows DLL export/import handling.| || +|formatAssertionPolicy|Format handling in composition branch matching. Only 'annotation' is supported: format metadata never affects match counts.|

    **annotation**
    Formats are annotations and do not affect validation
    |annotation| +|inferConditionalSseOperations|Infer conditional SSE for dual JSON/SSE operations only when the request selector and event model are unambiguous. Enabled by default.| |true| |modelPackage|C++ namespace for models (convention: name.space.model).| |org.openapitools.client.model| |packageName|C++ package and library name.| |CppBoostBeastOpenAPIClient| +|preserveAdditionalProperties|Retain undeclared JSON object members in generated object models and re-emit them. Composition validation accepts such members while decoding; set to false for strict additionalProperties handling.| |false| +|sseEventTypeMappings|Comma-separated operationId=Model mappings for the JSON schema of each SSE event data payload.| |null| +|sseOperationIds|Comma-separated operationIds whose JSON request body conditionally selects text/event-stream (default request property: stream).| |null| +|sseRequestPropertyMappings|Comma-separated operationId=property mappings for the boolean request property that selects SSE.| |null| +|sseSchemaMode|SSE schema interpretation mode for text/event-stream responses. 'representation' (default): the response schema describes the media representation; callbacks receive an owning SseEvent with raw data, event, id, and retry metadata. 'jsonEventData': decode each complete event data payload against the response schema and pass both the typed value and SseEvent metadata to the callback. Use x-sse-event-data-schema for per-operation typed decoding.|
    **representation**
    Schema describes the media representation; callback receives SseEvent
    **jsonEventData**
    Schema describes each JSON event data payload
    |representation| +|tolerateNonNullableNulls|Treat explicit JSON null values as absent for generated model properties whose schemas do not allow null. Enabled by default to tolerate non-conforming server responses while preserving required-key presence checks; set to false for strict schema decoding. Non-null values remain fully validated.| |true| ## IMPORT MAPPING @@ -32,8 +42,12 @@ These options may be applied as additional-properties (cli) or configOptions (pl |int32_t|#include <cstdint>| |int64_t|#include <cstdint>| |std::map|#include <map>| +|std::monostate|#include <variant>| |std::nullptr_t|#include <cstddef>| +|std::optional|#include <optional>| +|std::shared_ptr|#include <memory>| |std::string|#include <string>| +|std::variant|#include <variant>| |std::vector|#include <vector>| @@ -51,9 +65,9 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • double
  • float
  • int
  • -
  • int32_t
  • -
  • int64_t
  • long
  • +
  • std::int32_t
  • +
  • std::int64_t
  • ## RESERVED WORDS @@ -168,14 +182,14 @@ These options may be applied as additional-properties (cli) or configOptions (pl |Int64|✓|OAS2,OAS3 |Float|✓|OAS2,OAS3 |Double|✓|OAS2,OAS3 -|Decimal|✓|ToolingExtension +|Decimal|✗|ToolingExtension |String|✓|OAS2,OAS3 -|Byte|✓|OAS2,OAS3 -|Binary|✓|OAS2,OAS3 +|Byte|✗|OAS2,OAS3 +|Binary|✗|OAS2,OAS3 |Boolean|✓|OAS2,OAS3 -|Date|✓|OAS2,OAS3 -|DateTime|✓|OAS2,OAS3 -|Password|✓|OAS2,OAS3 +|Date|✗|OAS2,OAS3 +|DateTime|✗|OAS2,OAS3 +|Password|✗|OAS2,OAS3 |File|✓|OAS2 |Uuid|✗| |Array|✓|OAS2,OAS3 @@ -217,11 +231,11 @@ These options may be applied as additional-properties (cli) or configOptions (pl |ExternalDocumentation|✓|OAS2,OAS3 |Examples|✓|OAS2,OAS3 |XMLStructureDefinitions|✗|OAS2,OAS3 -|MultiServer|✗|OAS3 +|MultiServer|✓|OAS3 |ParameterizedServer|✗|OAS3 -|ParameterStyling|✗|OAS3 -|Callbacks|✗|OAS3 -|LinkObjects|✗|OAS3 +|ParameterStyling|✓|OAS3 +|Callbacks|✓|OAS3 +|LinkObjects|✓|OAS3 ### Parameter Feature | Name | Supported | Defined By | @@ -232,19 +246,19 @@ These options may be applied as additional-properties (cli) or configOptions (pl |Body|✓|OAS2 |FormUnencoded|✓|OAS2 |FormMultipart|✓|OAS2 -|Cookie|✗|OAS3 +|Cookie|✓|OAS3 ### Schema Support Feature | Name | Supported | Defined By | | ---- | --------- | ---------- | |Simple|✓|OAS2,OAS3 |Composite|✓|OAS2,OAS3 -|Polymorphism|✗|OAS2,OAS3 -|Union|✗|OAS3 -|allOf|✗|OAS2,OAS3 -|anyOf|✗|OAS3 -|oneOf|✗|OAS3 -|not|✗|OAS3 +|Polymorphism|✓|OAS2,OAS3 +|Union|✓|OAS3 +|allOf|✓|OAS2,OAS3 +|anyOf|✓|OAS3 +|oneOf|✓|OAS3 +|not|✓|OAS3 ### Security Feature | Name | Supported | Defined By | diff --git a/docs/generators/go-gin-server.md b/docs/generators/go-gin-server.md index 60e8653c13c0..406aaf0acd81 100644 --- a/docs/generators/go-gin-server.md +++ b/docs/generators/go-gin-server.md @@ -21,7 +21,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |apiPath|Name of the folder that contains the Go source code| |go| |enumClassPrefix|Prefix enum with class name| |false| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true| -|interfaceOnly|Whether to generate only API interface stubs without the implementation files.| |false| +|interfaceOnly|Whether to generate only API interface stubs instead of the API implementation files.| |false| |packageName|Go package name (convention: lowercase).| |openapi| |packageVersion|Go package version.| |1.0.0| |serverPort|The network port the generated server binds to| |8080| diff --git a/docs/generators/go.md b/docs/generators/go.md index 5ad8f47d10d4..d241f6471899 100644 --- a/docs/generators/go.md +++ b/docs/generators/go.md @@ -31,6 +31,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |structPrefix|whether to prefix struct with the class name. e.g. DeletePetOpts => PetApiDeletePetOpts| |false| |useDefaultValuesForRequiredVars|Use default values for required variables when available| |false| +|useHttpHeaderSet|When setting HTTP request headers, use http.Header.Set with canonicalized header names| |false| |useOneOfDiscriminatorLookup|Use the discriminator's mapping in oneOf to speed up the model lookup. IMPORTANT: Validation (e.g. one and only one match in oneOf's schemas) will be skipped.| |false| |withAWSV4Signature|whether to include AWS v4 signature support| |false| |withGoMod|Generate go.mod and go.sum| |true| diff --git a/docs/generators/groovy.md b/docs/generators/groovy.md index 8bd00f9a619d..e8d04d05ce81 100644 --- a/docs/generators/groovy.md +++ b/docs/generators/groovy.md @@ -55,7 +55,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-camel.md b/docs/generators/java-camel.md index ef1e380e7d99..10213f64b802 100644 --- a/docs/generators/java-camel.md +++ b/docs/generators/java-camel.md @@ -31,7 +31,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |artifactUrl|artifact URL in generated pom.xml| |https://github.com/openapitools/openapi-generator| |artifactVersion|artifact version in generated pom.xml. This also becomes part of the generated library's filename. If not provided, uses the version from the OpenAPI specification file. If that's also not present, uses the default value of the artifactVersion option.| |1.0.0| |async|use async Callable controllers| |false| -|autoXSpringPaginated|Automatically add x-spring-paginated to operations that have 'page', 'size', and 'sort' query parameters. When enabled, operations with all three parameters will have Pageable support automatically applied. Operations with x-spring-paginated explicitly set to false will not be auto-detected. Only applies when library=spring-boot.| |false| +|autoXSpringPaginated|Automatically add x-spring-paginated to operations that have 'page', 'size', and 'sort' query parameters. When enabled, operations with all three parameters will have Pageable support automatically applied. Operations with x-spring-paginated explicitly set to false will not be auto-detected. Only applies when library is spring-boot or spring-cloud.| |false| |basePackage|base package (invokerPackage) for generated code| |org.openapitools| |bigDecimalAsString|Treat BigDecimal values as Strings to avoid precision loss.| |false| |booleanGetterPrefix|Set booleanGetterPrefix| |get| @@ -64,8 +64,10 @@ These options may be applied as additional-properties (cli) or configOptions (pl |generateBuilders|Whether to generate builders for models| |false| |generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false| |generateGenericResponseEntity|Use a generic type for the `ResponseEntity` wrapping return values of generated API methods. If enabled, method are generated with return type ResponseEntity<?>| |false| -|generatePageableConstraintValidation|Generate a @ValidPageable annotation and PageableConstraintValidator class, and apply @ValidPageable to the injected Pageable parameter of operations whose 'page' or 'size' parameter specifies a maximum constraint. The annotation enforces those constraints on the Pageable object that replaces the individual page/size query parameters. Requires useBeanValidation=true and library=spring-boot.| |false| -|generateSortValidation|Generate a @ValidSort annotation and SortValidator class, and apply @ValidSort to the injected Pageable parameter of operations whose 'sort' parameter has enum values. The annotation validates that sort values in the Pageable object match the allowed enum values from the spec. Requires useBeanValidation=true and library=spring-boot.| |false| +|generateJsonIncludeAnnotations|Whether to generate policy @JsonInclude annotations on model properties. When true, emits spec-honest annotations (required-field protection and the optional non-nullable policy from optionalNonNullPropertyJsonInclude). When false, none are generated and the global ObjectMapper owns inclusion. When left unset it defaults to false (7.23.0-equivalent output) and logs a warning; set it explicitly to silence the warning. A per-property override set via the `x-jackson-json-include-policy` vendor extension is always honored regardless of this flag.| |false| +|generateJsonSetterNullsAnnotations|Whether to generate @JsonSetter(nulls = ...) annotations on optional non-nullable model properties. When true, emits @JsonSetter so an explicit null in the payload does not overwrite the field. When false, none are generated and deserialization null-handling defers to the global ObjectMapper. When left unset it defaults to false (7.23.0-equivalent output) and logs a warning; set it explicitly to silence the warning.| |false| +|generatePageableConstraintValidation|Generate a @ValidPageable annotation and PageableConstraintValidator class, and apply @ValidPageable to the injected Pageable parameter of operations whose 'page' or 'size' parameter specifies a maximum constraint. The annotation enforces those constraints on the Pageable object that replaces the individual page/size query parameters. Requires useBeanValidation=true and library is spring-boot or spring-cloud.| |false| +|generateSortValidation|Generate a @ValidSort annotation and SortValidator class, and apply @ValidSort to the injected Pageable parameter of operations whose 'sort' parameter has enum values. The annotation validates that sort values in the Pageable object match the allowed enum values from the spec. Requires useBeanValidation=true and library is spring-boot or spring-cloud.| |false| |generatedConstructorWithRequiredArgs|Whether to generate constructors with required args for models| |true| |groupId|groupId in generated pom.xml| |org.openapitools| |hateoas|Use Spring HATEOAS library to allow adding HATEOAS links| |false| @@ -83,7 +85,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |optionalAcceptNullable|Use `ofNullable` instead of just `of` to accept null values when using Optional.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| +|optionalNonNullPropertyJsonInclude|The Jackson @JsonInclude policy emitted for optional, non-nullable model properties when generateJsonIncludeAnnotations is true. NONE emits no annotation, deferring fully to the global ObjectMapper inclusion policy.|
    **NON_NULL**
    Omit the property when its value is null (default, spec-safe for non-nullable fields).
    **NON_EMPTY**
    Omit the property when its value is null or considered empty.
    **NON_DEFAULT**
    Omit the property when its value equals the default.
    **NONE**
    Emit no @JsonInclude annotation; defer to the global ObjectMapper.
    |NON_NULL| +|optionalNonNullPropertyJsonSetterNulls|The Jackson @JsonSetter(nulls = ...) mode emitted for optional, non-nullable model properties when generateJsonSetterNullsAnnotations is true. SKIP ignores an explicit JSON null (keeping the field's default), FAIL rejects it. When left unset the mode is derived from openApiNullable (true -> FAIL where supported, false -> SKIP), preserving 7.24.x behavior. A per-property override set via the `x-jackson-json-setter-nulls` vendor extension always wins.|
    **SKIP**
    Emit @JsonSetter(nulls = Nulls.SKIP): silently ignore an explicit JSON null, keeping the field's default.
    **FAIL**
    Emit @JsonSetter(nulls = Nulls.FAIL): reject an explicit JSON null.
    |null| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| @@ -106,6 +109,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |sourceFolder|source folder for generated code| |src/main/java| |springApiVersion|Value for 'version' attribute in @RequestMapping (for Spring 7 and above).| |null| +|springSecurityAuthorityPrefix|Prefix added to OAuth2/OpenID Connect scopes when generating Spring Security authorities.| |SCOPE_| |substituteGenericPagedModel|Detect schemas that represent paginated responses (an object with a 'content' array property and a 'page' pagination-metadata property) and replace their generated references with PagedModel<T>. By default this uses a generated type in the config package (default 'org.openapitools.configuration'), but `importMappings.PagedModel` can override it to a custom/FQCN-mapped type. The detected page schemas and the pagination metadata schema are suppressed from code generation.| |false| |testOutput|Set output folder for models and APIs tests| |${project.build.directory}/generated-test-sources/openapi| |title|server title name or client service name| |OpenAPI Spring| @@ -128,6 +132,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |useSpringBoot4|Generate code and provide dependencies for use with Spring Boot 4.x. (Use jakarta instead of javax in imports). Enabling this option will also enable `useJakartaEe`.| |false| |useSpringBuiltInValidation|Disable `@Validated` at the class level when using built-in validation.| |false| |useSpringController|Annotate the generated API as a Spring Controller| |false| +|useSpringSecurityPreAuthorize|Generate Spring Security @PreAuthorize annotations from OAuth2/OpenID Connect security scopes.| |false| |useSwaggerUI|Open the OpenApi specification in swagger-ui. Will also import and configure needed dependencies| |true| |useTags|use tags for creating interface and controller classnames| |false| |virtualService|Generates the virtual service. For more details refer - https://github.com/virtualansoftware/virtualan/wiki| |false| @@ -147,13 +152,15 @@ These options may be applied as additional-properties (cli) or configOptions (pl |x-class-extra-annotation|Custom annotation(s) to be added to model; accepts a string or list of strings|MODEL|null |x-field-extra-annotation|Custom annotation(s) to be added to property; accepts a string or list of strings|FIELD, OPERATION_PARAMETER|null |x-operation-extra-annotation|Custom annotation(s) to be added to operation; accepts a string or list of strings|OPERATION|null -|x-spring-paginated|Add `org.springframework.data.domain.Pageable` to controller method. Can be used to handle `page`, `size` and `sort` query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the `Pageable` object. Only applies when `library=spring-boot`; ignored for client libraries (spring-cloud, spring-declarative-http-interface).|OPERATION|false +|x-spring-paginated|Add `org.springframework.data.domain.Pageable` to controller method. Can be used to handle `page`, `size` and `sort` query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the `Pageable` object. Applies when `library=spring-boot` or `library=spring-cloud`; ignored for other (client) libraries.|OPERATION|false |x-version-param|Marker property that tells that this parameter would be used for endpoint versioning. Applicable for headers & query params. true/false|OPERATION_PARAMETER|null |x-pattern-message|Add this property whenever you need to customize the invalidation error message for the regex pattern of a variable|FIELD, OPERATION_PARAMETER|null |x-size-message|Add this property whenever you need to customize the invalidation error message for the size or length of a variable|FIELD, OPERATION_PARAMETER|null |x-minimum-message|Add this property whenever you need to customize the invalidation error message for the minimum value of a variable|FIELD, OPERATION_PARAMETER|null |x-maximum-message|Add this property whenever you need to customize the invalidation error message for the maximum value of a variable|FIELD, OPERATION_PARAMETER|null |x-spring-api-version|Value for 'version' attribute in @RequestMapping (for Spring 7 and above).|OPERATION|null +|x-jackson-json-include-policy|Manually override the resolved Jackson `@JsonInclude` policy for this property. Must be one of `ALWAYS`, `NON_NULL`, `NON_ABSENT`, `NON_EMPTY`, `NON_DEFAULT`, `USE_DEFAULTS`, `CUSTOM`, or `NONE` to emit no annotation. Always wins over the automatic required/nullable matrix and the `optionalNonNullPropertyJsonInclude` option.|FIELD|resolved automatically per the required/nullable matrix +|x-jackson-json-setter-nulls|Manually override the resolved Jackson `@JsonSetter(nulls = ...)` deserialization null-handling for this property. Must be one of `SKIP` (ignore an explicit JSON null, keeping the default), `FAIL` (reject an explicit JSON null), or `NONE` to emit no annotation. Always wins over the automatic `openApiNullable` default and the `optionalNonNullPropertyJsonSetterNulls` option, and is honored regardless of `generateJsonSetterNullsAnnotations` or whether the property is required/nullable.|FIELD|resolved automatically per the openApiNullable default ## IMPORT MAPPING diff --git a/docs/generators/java-dubbo.md b/docs/generators/java-dubbo.md index 3b00cf81e6a1..bfefdf75b932 100644 --- a/docs/generators/java-dubbo.md +++ b/docs/generators/java-dubbo.md @@ -62,7 +62,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-helidon-client.md b/docs/generators/java-helidon-client.md index 8cb3eae69128..8a87fada3826 100644 --- a/docs/generators/java-helidon-client.md +++ b/docs/generators/java-helidon-client.md @@ -56,7 +56,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.client.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |rootJavaEEPackage|Root package name for Java EE| |Helidon 2.x and earlier: javax; Helidon 3.x and later: jakarta| |serializableModel|boolean - toggle "implements Serializable" for generated models| |false| diff --git a/docs/generators/java-helidon-server.md b/docs/generators/java-helidon-server.md index 6b3817af54d9..1527e389ad6a 100644 --- a/docs/generators/java-helidon-server.md +++ b/docs/generators/java-helidon-server.md @@ -56,7 +56,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.server.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |performBeanValidation|Perform BeanValidation| |false| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |rootJavaEEPackage|Root package name for Java EE| |Helidon 2.x and earlier: javax; Helidon 3.x and later: jakarta| diff --git a/docs/generators/java-inflector.md b/docs/generators/java-inflector.md index 60a6a29b5624..8053570ee1c7 100644 --- a/docs/generators/java-inflector.md +++ b/docs/generators/java-inflector.md @@ -57,7 +57,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-micronaut-client.md b/docs/generators/java-micronaut-client.md index 0a5d720c50a9..e0075fa21ce8 100644 --- a/docs/generators/java-micronaut-client.md +++ b/docs/generators/java-micronaut-client.md @@ -69,7 +69,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |micronautVersion|Micronaut version, only >=3.0.0 versions are supported| |3.4.3| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-micronaut-server.md b/docs/generators/java-micronaut-server.md index fb5eace9e2d5..84e247ddb86a 100644 --- a/docs/generators/java-micronaut-server.md +++ b/docs/generators/java-micronaut-server.md @@ -67,7 +67,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |micronautVersion|Micronaut version, only >=3.0.0 versions are supported| |3.4.3| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-microprofile.md b/docs/generators/java-microprofile.md index de4127c14a51..2dfaf5e0bcf4 100644 --- a/docs/generators/java-microprofile.md +++ b/docs/generators/java-microprofile.md @@ -74,7 +74,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |microprofileRestClientVersion|Version of MicroProfile Rest Client API.| |null| |modelPackage|package for generated models| |org.openapitools.client.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parcelableModel|Whether to generate models for Android that implement Parcelable with the okhttp-gson library.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-msf4j.md b/docs/generators/java-msf4j.md index 72aa3464aba5..5a450378071a 100644 --- a/docs/generators/java-msf4j.md +++ b/docs/generators/java-msf4j.md @@ -59,7 +59,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-pkmst.md b/docs/generators/java-pkmst.md index 3ca84963b7f2..d4fbfd9ad901 100644 --- a/docs/generators/java-pkmst.md +++ b/docs/generators/java-pkmst.md @@ -59,7 +59,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |com.prokarma.pkmst.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-play-framework.md b/docs/generators/java-play-framework.md index 4a1c616ddbf9..d9948ceb7ebc 100644 --- a/docs/generators/java-play-framework.md +++ b/docs/generators/java-play-framework.md @@ -61,7 +61,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |apimodels| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-undertow-server.md b/docs/generators/java-undertow-server.md index 3700d7a4b630..9ffaffc0f561 100644 --- a/docs/generators/java-undertow-server.md +++ b/docs/generators/java-undertow-server.md @@ -57,7 +57,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |null| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-vertx-web.md b/docs/generators/java-vertx-web.md index cddf51ab5c58..99befa626be4 100644 --- a/docs/generators/java-vertx-web.md +++ b/docs/generators/java-vertx-web.md @@ -51,13 +51,13 @@ These options may be applied as additional-properties (cli) or configOptions (pl |ignoreAnyOfInEnum|Ignore anyOf keyword in enum| |false| |implicitHeaders|Skip header parameters in the generated API methods using @ApiImplicitParams annotation.| |false| |implicitHeadersRegex|Skip header parameters that matches given regex in the generated API methods using @ApiImplicitParams annotation. Note: this parameter is ignored when implicitHeaders=true| |null| +|interfaceOnly|Whether to generate only API interface stubs without the server files.| |false| |invokerPackage|root package for generated code| |org.openapitools.vertxweb.server| |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| |licenseName|The name of the license| |Unlicense| |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.vertxweb.server.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-vertx.md b/docs/generators/java-vertx.md index 1f4e1af41ead..8764f3610561 100644 --- a/docs/generators/java-vertx.md +++ b/docs/generators/java-vertx.md @@ -57,7 +57,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.server.api.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java-wiremock.md b/docs/generators/java-wiremock.md index 97eb27508901..80a270223a72 100644 --- a/docs/generators/java-wiremock.md +++ b/docs/generators/java-wiremock.md @@ -57,7 +57,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |null| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/java.md b/docs/generators/java.md index 40ef2fb6f2b8..6740780102b9 100644 --- a/docs/generators/java.md +++ b/docs/generators/java.md @@ -74,7 +74,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |microprofileRestClientVersion|Version of MicroProfile Rest Client API.| |null| |modelPackage|package for generated models| |org.openapitools.client.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parcelableModel|Whether to generate models for Android that implement Parcelable with the okhttp-gson library.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-cxf-cdi.md b/docs/generators/jaxrs-cxf-cdi.md index 2ea90c843846..0621af4230c1 100644 --- a/docs/generators/jaxrs-cxf-cdi.md +++ b/docs/generators/jaxrs-cxf-cdi.md @@ -47,6 +47,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |generateBuilders|Whether to generate builders for models| |false| |generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false| |generatePom|Whether to generate pom.xml if the file does not already exist.| |true| +|generateRootResources|Whether to generate the root resource and application classes, only useful if interfaceOnly is true.| |true| |groupId|groupId in generated pom.xml| |org.openapitools| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |false| |ignoreAnyOfInEnum|Ignore anyOf keyword in enum| |false| @@ -62,7 +63,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |openApiSpecFileLocation|Location where the file containing the spec will be generated in the output folder. No file generated when set to null or empty string.| |null| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-cxf-client.md b/docs/generators/jaxrs-cxf-client.md index bc85a23477a6..ec8e4535d969 100644 --- a/docs/generators/jaxrs-cxf-client.md +++ b/docs/generators/jaxrs-cxf-client.md @@ -59,7 +59,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-cxf-extended.md b/docs/generators/jaxrs-cxf-extended.md index f7c8fbb38369..9e5f7c1786c2 100644 --- a/docs/generators/jaxrs-cxf-extended.md +++ b/docs/generators/jaxrs-cxf-extended.md @@ -67,7 +67,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |loadTestDataFromFile|Load test data from a generated JSON file| |false| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-cxf.md b/docs/generators/jaxrs-cxf.md index 4f4a5e4175cc..7323d6be98fb 100644 --- a/docs/generators/jaxrs-cxf.md +++ b/docs/generators/jaxrs-cxf.md @@ -65,7 +65,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-jersey.md b/docs/generators/jaxrs-jersey.md index 0c6fbcb4aa7d..98804c588ea5 100644 --- a/docs/generators/jaxrs-jersey.md +++ b/docs/generators/jaxrs-jersey.md @@ -59,7 +59,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-resteasy-eap.md b/docs/generators/jaxrs-resteasy-eap.md index f6e0c9815de5..96482de456fd 100644 --- a/docs/generators/jaxrs-resteasy-eap.md +++ b/docs/generators/jaxrs-resteasy-eap.md @@ -59,7 +59,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-resteasy.md b/docs/generators/jaxrs-resteasy.md index 8355a5802080..5c99da79a439 100644 --- a/docs/generators/jaxrs-resteasy.md +++ b/docs/generators/jaxrs-resteasy.md @@ -59,7 +59,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://unlicense.org| |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/jaxrs-spec.md b/docs/generators/jaxrs-spec.md index 7bc691ec5bba..d6251797095b 100644 --- a/docs/generators/jaxrs-spec.md +++ b/docs/generators/jaxrs-spec.md @@ -48,6 +48,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false| |generateJsonCreator|Whether to generate @JsonCreator constructor for required properties.| |true| |generatePom|Whether to generate pom.xml if the file does not already exist.| |true| +|generateRootResources|Whether to generate the root resource and application classes, only useful if interfaceOnly is true.| |true| |groupId|groupId in generated pom.xml| |org.openapitools| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |false| |ignoreAnyOfInEnum|Ignore anyOf keyword in enum| |false| @@ -63,7 +64,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |openApiSpecFileLocation|Location where the file containing the spec will be generated in the output folder. No file generated when set to null or empty string.| |null| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| diff --git a/docs/generators/kotlin-spring.md b/docs/generators/kotlin-spring.md index f42388d53000..e4a0074ee562 100644 --- a/docs/generators/kotlin-spring.md +++ b/docs/generators/kotlin-spring.md @@ -33,8 +33,10 @@ These options may be applied as additional-properties (cli) or configOptions (pl |documentationProvider|Select the OpenAPI documentation provider.|
    **none**
    Do not publish an OpenAPI specification.
    **source**
    Publish the original input OpenAPI specification.
    **springdoc**
    Generate an OpenAPI 3 specification using SpringDoc.
    |springdoc| |enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', 'original', and 'bestEffortBacktick' (like 'original' but tries to wrap values in backticks before falling back to sanitizing, e.g. `name,asc` stays `name,asc` rather than becoming nameCommaAsc; useful for sort/order enums)| |original| |exceptionHandler|generate default global exception handlers (not compatible with reactive. enabling reactive will disable exceptionHandler )| |true| -|generatePageableConstraintValidation|Generate a @ValidPageable annotation and PageableConstraintValidator class, and apply @ValidPageable to the injected Pageable parameter of operations whose 'page' or 'size' parameter specifies a maximum constraint. The annotation enforces those constraints on the Pageable object that replaces the individual page/size query parameters. Requires useBeanValidation=true and library=spring-boot.| |false| -|generateSortValidation|Generate a @ValidSort annotation and SortValidator class, and apply @ValidSort to the injected Pageable parameter of operations whose 'sort' parameter has enum values. The annotation validates that sort values in the Pageable object match the allowed enum values from the spec. Requires useBeanValidation=true and library=spring-boot.| |false| +|generateJsonIncludeAnnotations|Whether to generate policy @JsonInclude annotations on model properties. When true, emits spec-honest annotations (required-field protection and the optional non-nullable policy from optionalNonNullPropertyJsonInclude). When false, none are generated and the global ObjectMapper owns inclusion. When left unset it defaults to false (7.23.0-equivalent output) and logs a warning; set it explicitly to silence the warning. A per-property override set via the `x-jackson-json-include-policy` vendor extension is always honored regardless of this flag.| |false| +|generateJsonSetterNullsAnnotations|Whether to generate @JsonSetter(nulls = ...) annotations on optional non-nullable model properties. When true, emits @JsonSetter (Nulls.FAIL when openApiNullable is true, otherwise Nulls.SKIP) so an explicit null in the payload is handled explicitly. When false, none are generated and deserialization null-handling defers to the global ObjectMapper. When left unset it defaults to false (7.23.0-equivalent output) and logs a warning; set it explicitly to silence the warning.| |false| +|generatePageableConstraintValidation|Generate a @ValidPageable annotation and PageableConstraintValidator class, and apply @ValidPageable to the injected Pageable parameter of operations whose 'page' or 'size' parameter specifies a maximum constraint. The annotation enforces those constraints on the Pageable object that replaces the individual page/size query parameters. Requires useBeanValidation=true and library is spring-boot or spring-cloud.| |false| +|generateSortValidation|Generate a @ValidSort annotation and SortValidator class, and apply @ValidSort to the injected Pageable parameter of operations whose 'sort' parameter has enum values. The annotation validates that sort values in the Pageable object match the allowed enum values from the spec. Requires useBeanValidation=true and library is spring-boot or spring-cloud.| |false| |gradleBuildFile|generate a gradle build file using the Kotlin DSL| |true| |groupId|Generated artifact package's organization (i.e. maven groupId).| |org.openapitools| |implicitHeaders|Skip header parameters in the generated API methods.| |false| @@ -44,6 +46,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelMutable|Create mutable models| |false| |modelPackage|model package for generated code| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library (jackson-databind-nullable) for strict null handling. Controls how optional + non-nullable properties (required: false, nullable: false) handle explicit JSON null: when false (default), @JsonSetter(nulls = Nulls.SKIP) is used — explicit null is silently ignored (lenient, protects any default value from being overridden); when true, @JsonSetter(nulls = Nulls.FAIL) is used — explicit null causes deserialization to fail (strict, enforces the non-nullable contract, useful for PATCH semantics). Additionally, when true, optional + nullable properties (required: false, nullable: true) use JsonNullable<T> = JsonNullable.undefined() to distinguish between a missing key and an explicit null. Requires jackson-databind-nullable >= 0.2.10 when used with useJackson3.| |false| +|optionalNonNullPropertyJsonInclude|The Jackson @JsonInclude policy emitted for optional, non-nullable model properties when generateJsonIncludeAnnotations is true. NONE emits no annotation, deferring fully to the global ObjectMapper inclusion policy.|
    **NON_NULL**
    Omit the property when its value is null (default, spec-safe for non-nullable fields).
    **NON_EMPTY**
    Omit the property when its value is null or considered empty.
    **NON_DEFAULT**
    Omit the property when its value equals the default.
    **NONE**
    Emit no @JsonInclude annotation; defer to the global ObjectMapper.
    |NON_NULL| +|optionalNonNullPropertyJsonSetterNulls|The Jackson @JsonSetter(nulls = ...) mode emitted for optional, non-nullable model properties when generateJsonSetterNullsAnnotations is true. SKIP ignores an explicit JSON null (keeping the field's default), FAIL rejects it. When left unset the mode is derived from openApiNullable (true -> FAIL where supported, false -> SKIP), preserving 7.24.x behavior. A per-property override set via the `x-jackson-json-setter-nulls` vendor extension always wins.|
    **SKIP**
    Emit @JsonSetter(nulls = Nulls.SKIP): silently ignore an explicit JSON null, keeping the field's default.
    **FAIL**
    Emit @JsonSetter(nulls = Nulls.FAIL): reject an explicit JSON null.
    |null| |packageName|Generated artifact package name.| |org.openapitools| |parcelizeModels|toggle "@Parcelize" for generated models| |null| |reactive|use coroutines for reactive behavior| |false| @@ -87,13 +91,16 @@ These options may be applied as additional-properties (cli) or configOptions (pl |x-discriminator-value|Used with model inheritance to specify value for discriminator that identifies current model|MODEL| |x-field-extra-annotation|Custom annotation(s) to be added to property; accepts a string or list of strings|FIELD, OPERATION_PARAMETER|null |x-operation-extra-annotation|Custom annotation(s) to be added to operation; accepts a string or list of strings|OPERATION|null +|x-extra-imports|Custom import(s) to add to the generated file that declares the annotated model, property, operation, or parameter (e.g. so custom annotations can be referenced by their short name); accepts a string or list of strings. Values are emitted verbatim (Kotlin alias imports supported) and only exact duplicates are removed|MODEL, FIELD, OPERATION, OPERATION_PARAMETER|null |x-pattern-message|Add this property whenever you need to customize the invalidation error message for the regex pattern of a variable|FIELD, OPERATION_PARAMETER|null |x-size-message|Add this property whenever you need to customize the invalidation error message for the size or length of a variable|FIELD, OPERATION_PARAMETER|null |x-minimum-message|Add this property whenever you need to customize the invalidation error message for the minimum value of a variable|FIELD, OPERATION_PARAMETER|null |x-maximum-message|Add this property whenever you need to customize the invalidation error message for the maximum value of a variable|FIELD, OPERATION_PARAMETER|null |x-kotlin-implements|Ability to specify interfaces that model must implement|MODEL|empty array |x-kotlin-implements-fields|Specify attributes that are implemented by the interface(s) added via `x-kotlin-implements`|MODEL|empty array -|x-spring-paginated|Add `org.springframework.data.domain.Pageable` to controller method. Can be used to handle `page`, `size` and `sort` query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the `Pageable` object. Only applies when `library=spring-boot`; ignored for client libraries (spring-cloud, spring-declarative-http-interface).|OPERATION|false +|x-spring-paginated|Add `org.springframework.data.domain.Pageable` to controller method. Can be used to handle `page`, `size` and `sort` query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the `Pageable` object. Applies when `library=spring-boot` or `library=spring-cloud`; ignored for other (client) libraries.|OPERATION|false +|x-jackson-json-include-policy|Manually override the resolved Jackson `@JsonInclude` policy for this property. Must be one of `ALWAYS`, `NON_NULL`, `NON_ABSENT`, `NON_EMPTY`, `NON_DEFAULT`, `USE_DEFAULTS`, `CUSTOM`, or `NONE` to emit no annotation. Always wins over the automatic required/nullable matrix and the `optionalNonNullPropertyJsonInclude` option.|FIELD|resolved automatically per the required/nullable matrix +|x-jackson-json-setter-nulls|Manually override the resolved Jackson `@JsonSetter(nulls = ...)` deserialization null-handling for this property. Must be one of `SKIP` (ignore an explicit JSON null, keeping the default), `FAIL` (reject an explicit JSON null), or `NONE` to emit no annotation. Always wins over the automatic `openApiNullable` default and the `optionalNonNullPropertyJsonSetterNulls` option, and is honored regardless of `generateJsonSetterNullsAnnotations` or whether the property is required/nullable.|FIELD|resolved automatically per the openApiNullable default ## IMPORT MAPPING diff --git a/docs/generators/kotlin.md b/docs/generators/kotlin.md index 0edb342ddb4d..46a8a577c96b 100644 --- a/docs/generators/kotlin.md +++ b/docs/generators/kotlin.md @@ -32,7 +32,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |groupId|Generated artifact package's organization (i.e. maven groupId).| |org.openapitools| |idea|Add IntelliJ Idea plugin and mark Kotlin main and test folders as source folders.| |false| |implicitHeaders|Skip header parameters in the generated API methods.| |false| -|library|Library template (sub-template) to use|
    **jvm-ktor**
    Platform: Java Virtual Machine. HTTP client: Ktor 1.6.7. JSON processing: Gson, Jackson (default).
    **jvm-okhttp4**
    [DEFAULT] Platform: Java Virtual Machine. HTTP client: OkHttp 4.2.0 (Android 5.0+ and Java 8+). JSON processing: Moshi 1.8.0.
    **jvm-spring-webclient**
    Platform: Java Virtual Machine. HTTP: Spring 5 (or 6 with useSpringBoot3 enabled) WebClient. JSON processing: Jackson.
    **jvm-spring-restclient**
    Platform: Java Virtual Machine. HTTP: Spring 6 RestClient. JSON processing: Jackson.
    **jvm-retrofit2**
    Platform: Java Virtual Machine. HTTP client: Retrofit 2.6.2.
    **multiplatform**
    Platform: Kotlin multiplatform. HTTP client: Ktor 1.6.7. JSON processing: Kotlinx Serialization: 1.2.1.
    **jvm-volley**
    Platform: JVM for Android. HTTP client: Volley 1.2.1. JSON processing: gson 2.8.9 (Deprecated)
    **jvm-vertx**
    Platform: Java Virtual Machine. HTTP client: Vert.x Web Client. JSON processing: Moshi, Gson or Jackson.
    |jvm-okhttp4| +|library|Library template (sub-template) to use|
    **jvm-ktor**
    Platform: Java Virtual Machine. HTTP client: Ktor 1.6.7. JSON processing: Gson, Jackson (default).
    **jvm-okhttp4**
    [DEFAULT] Platform: Java Virtual Machine. HTTP client: OkHttp 4.2.0 (Android 5.0+ and Java 8+). JSON processing: Moshi 1.8.0.
    **jvm-spring-webclient**
    Platform: Java Virtual Machine. HTTP: Spring 5 (or 6 with useSpringBoot3 enabled) WebClient. JSON processing: Jackson.
    **jvm-spring-restclient**
    Platform: Java Virtual Machine. HTTP: Spring 6 (or 7 with useSpringBoot4 enabled) RestClient. JSON processing: Jackson.
    **jvm-retrofit2**
    Platform: Java Virtual Machine. HTTP client: Retrofit 2.6.2.
    **multiplatform**
    Platform: Kotlin multiplatform. HTTP client: Ktor 1.6.7. JSON processing: Kotlinx Serialization: 1.2.1.
    **jvm-volley**
    Platform: JVM for Android. HTTP client: Volley 1.2.1. JSON processing: gson 2.8.9 (Deprecated)
    **jvm-vertx**
    Platform: Java Virtual Machine. HTTP client: Vert.x Web Client. JSON processing: Moshi, Gson or Jackson.
    |jvm-okhttp4| |mapFileBinaryToByteArray|Map File and Binary to ByteArray (default: false)| |false| |modelMutable|Create mutable models| |false| |moshiCodeGen|Whether to enable codegen with the Moshi library. Refer to the [official Moshi doc](https://github.com/square/moshi#codegen) for more info.| |false| @@ -50,12 +50,13 @@ These options may be applied as additional-properties (cli) or configOptions (pl |sourceFolder|source folder for generated code| |src/main/kotlin| |supportAndroidApiLevel25AndBelow|[WARNING] This flag will generate code that has a known security vulnerability. It uses `kotlin.io.createTempFile` instead of `java.nio.file.Files.createTempFile` in order to support Android API level 25 and below. For more info, please check the following links https://github.com/OpenAPITools/openapi-generator/security/advisories/GHSA-23x4-m842-fmwf, https://github.com/OpenAPITools/openapi-generator/pull/9284| |false| |useCoroutines|Whether to use the Coroutines adapter with the retrofit2 library.| |false| -|useJackson3|Use Jackson 3 dependencies (tools.jackson package). Not yet supported for kotlin-client; reserved for future use.| |false| +|useJackson3|Use Jackson 3 dependencies (tools.jackson package). Requires serializationLibrary=jackson. Incompatible with openApiNullable.| |false| |useNonAsciiHeaders|Allow to use non-ascii headers with the okhttp library| |false| |useResponseAsReturnType|When using retrofit2 and coroutines, use `Response`<`T`> as return type instead of `T`.| |true| |useRxJava3|Whether to use the RxJava3 adapter with the retrofit2 library.| |false| |useSettingsGradle|Whether the project uses settings.gradle.| |false| |useSpringBoot3|Whether to use the Spring Boot 3 with the jvm-spring-webclient library.| |false| +|useSpringBoot4|Whether to use the Spring Boot 4 with the jvm-spring-restclient library.| |false| ## SUPPORTED VENDOR EXTENSIONS diff --git a/docs/generators/php-dt.md b/docs/generators/php-dt.md index 18ab8967f7ab..dd7c5be90a32 100644 --- a/docs/generators/php-dt.md +++ b/docs/generators/php-dt.md @@ -107,6 +107,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • +
  • finally
  • +
  • fn
  • for
  • foreach
  • formparams
  • @@ -124,6 +126,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • +
  • match
  • namespace
  • new
  • or
  • @@ -132,6 +135,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • +
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -146,6 +150,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • +
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php-flight.md b/docs/generators/php-flight.md index da33756d10f6..201d5b158fb5 100644 --- a/docs/generators/php-flight.md +++ b/docs/generators/php-flight.md @@ -109,6 +109,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • +
  • finally
  • +
  • fn
  • for
  • foreach
  • formparams
  • @@ -126,6 +128,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • +
  • match
  • namespace
  • new
  • or
  • @@ -134,6 +137,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • +
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -148,6 +152,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • +
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php-laravel.md b/docs/generators/php-laravel.md index 99dd2adc65bf..0385c6f9e508 100644 --- a/docs/generators/php-laravel.md +++ b/docs/generators/php-laravel.md @@ -110,6 +110,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • +
  • finally
  • +
  • fn
  • for
  • foreach
  • formparams
  • @@ -127,6 +129,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • +
  • match
  • namespace
  • new
  • or
  • @@ -135,6 +138,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • +
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -149,6 +153,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • +
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php-lumen.md b/docs/generators/php-lumen.md index b1855c33e3f4..cd189777faa6 100644 --- a/docs/generators/php-lumen.md +++ b/docs/generators/php-lumen.md @@ -108,6 +108,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • +
  • finally
  • +
  • fn
  • for
  • foreach
  • formparams
  • @@ -125,6 +127,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • +
  • match
  • namespace
  • new
  • or
  • @@ -133,6 +136,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • +
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -147,6 +151,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • +
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php-mezzio-ph.md b/docs/generators/php-mezzio-ph.md index bd408a268a8c..efa2d983634b 100644 --- a/docs/generators/php-mezzio-ph.md +++ b/docs/generators/php-mezzio-ph.md @@ -107,6 +107,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • +
  • finally
  • +
  • fn
  • for
  • foreach
  • formparams
  • @@ -124,6 +126,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • +
  • match
  • namespace
  • new
  • or
  • @@ -132,6 +135,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • +
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -146,6 +150,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • +
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php-nextgen.md b/docs/generators/php-nextgen.md index e5f57d1487ea..0ac0c8a54a61 100644 --- a/docs/generators/php-nextgen.md +++ b/docs/generators/php-nextgen.md @@ -110,6 +110,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • +
  • finally
  • +
  • fn
  • for
  • foreach
  • formparams
  • @@ -127,6 +129,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • +
  • match
  • namespace
  • new
  • or
  • @@ -135,6 +138,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • +
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -149,6 +153,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • +
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php-slim4.md b/docs/generators/php-slim4.md index e243886c016e..fe6cce72a896 100644 --- a/docs/generators/php-slim4.md +++ b/docs/generators/php-slim4.md @@ -109,6 +109,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • +
  • finally
  • +
  • fn
  • for
  • foreach
  • formparams
  • @@ -126,6 +128,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • +
  • match
  • namespace
  • new
  • or
  • @@ -134,6 +137,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • +
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -148,6 +152,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • +
  • yield
  • ## FEATURE SET diff --git a/docs/generators/php.md b/docs/generators/php.md index 68830fa61a66..cc72eb276096 100644 --- a/docs/generators/php.md +++ b/docs/generators/php.md @@ -110,6 +110,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • exit
  • extends
  • final
  • +
  • finally
  • +
  • fn
  • for
  • foreach
  • formparams
  • @@ -127,6 +129,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • interface
  • isset
  • list
  • +
  • match
  • namespace
  • new
  • or
  • @@ -135,6 +138,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • protected
  • public
  • queryparams
  • +
  • readonly
  • require
  • require_once
  • resourcepath
  • @@ -149,6 +153,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • var
  • while
  • xor
  • +
  • yield
  • ## FEATURE SET diff --git a/docs/generators/python-pydantic-v1.md b/docs/generators/python-pydantic-v1.md index 0d8b836a7b29..eff68837b4cb 100644 --- a/docs/generators/python-pydantic-v1.md +++ b/docs/generators/python-pydantic-v1.md @@ -24,7 +24,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| |generateSourceCodeOnly|Specifies that only a library source code is to be generated.| |false| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true| -|library|library template (sub-template) to use: asyncio, tornado (deprecated), urllib3| |urllib3| +|library|library template (sub-template) to use: asyncio, urllib3| |urllib3| |mapNumberTo|Map number to Union[StrictFloat, StrictInt], StrictStr or float.| |Union[StrictFloat, StrictInt]| |packageName|python package name (convention: snake_case).| |openapi_client| |packageUrl|python package URL.| |null| diff --git a/docs/generators/python.md b/docs/generators/python.md index d48066a8d0a0..01a156d5e06a 100644 --- a/docs/generators/python.md +++ b/docs/generators/python.md @@ -27,7 +27,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |generateSourceCodeOnly|Specifies that only a library source code is to be generated.| |false| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true| |lazyImports|Enable lazy imports.| |false| -|library|library template (sub-template) to use: asyncio, tornado (deprecated), urllib3, httpx| |urllib3| +|library|library template (sub-template) to use: asyncio, urllib3, httpx| |urllib3| |mapNumberTo|Map number to Union[StrictFloat, StrictInt], StrictFloat, float or Decimal.| |Union[StrictFloat, StrictInt]| |packageName|python package name (convention: snake_case).| |openapi_client| |packageUrl|python package URL.| |null| @@ -101,6 +101,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • for
  • form_params
  • from
  • +
  • from_dict
  • +
  • from_json
  • global
  • header_params
  • if
  • @@ -110,6 +112,22 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • json
  • lambda
  • local_var_files
  • +
  • model_computed_fields
  • +
  • model_config
  • +
  • model_construct
  • +
  • model_copy
  • +
  • model_dump
  • +
  • model_dump_json
  • +
  • model_extra
  • +
  • model_fields
  • +
  • model_fields_set
  • +
  • model_json_schema
  • +
  • model_parametrized_name
  • +
  • model_post_init
  • +
  • model_rebuild
  • +
  • model_validate
  • +
  • model_validate_json
  • +
  • model_validate_strings
  • none
  • nonlocal
  • not
  • @@ -124,6 +142,9 @@ These options may be applied as additional-properties (cli) or configOptions (pl
  • return
  • schema
  • self
  • +
  • to_dict
  • +
  • to_json
  • +
  • to_str
  • true
  • try
  • while
  • diff --git a/docs/generators/scala-sttp4-jsoniter.md b/docs/generators/scala-sttp4-jsoniter.md index c0a61a46a479..01e169ca73bd 100644 --- a/docs/generators/scala-sttp4-jsoniter.md +++ b/docs/generators/scala-sttp4-jsoniter.md @@ -23,7 +23,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |enumUnknownDefaultCase|If the server adds new enum cases, that are unknown by an old spec/client, the client will fail to parse the network response. With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the server sends an enum case that is not known by the client/spec, they can safely fallback to this case.|
    **false**
    No changes to the enums are made, this is the default option.
    **true**
    With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the enum case sent by the server is not known by the client/spec, can safely be decoded to this case.
    |false| -|jsoniterVersion|The version of jsoniter-scala library| |2.39.1| +|jsoniterVersion|The version of jsoniter-scala library| |2.40.1| |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| |mainPackage|Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'| |org.openapitools.client| |modelPackage|package for generated models| |null| diff --git a/docs/generators/spring.md b/docs/generators/spring.md index c04f804b809d..adf5726a9d8a 100644 --- a/docs/generators/spring.md +++ b/docs/generators/spring.md @@ -31,7 +31,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |artifactUrl|artifact URL in generated pom.xml| |https://github.com/openapitools/openapi-generator| |artifactVersion|artifact version in generated pom.xml. This also becomes part of the generated library's filename. If not provided, uses the version from the OpenAPI specification file. If that's also not present, uses the default value of the artifactVersion option.| |1.0.0| |async|use async Callable controllers| |false| -|autoXSpringPaginated|Automatically add x-spring-paginated to operations that have 'page', 'size', and 'sort' query parameters. When enabled, operations with all three parameters will have Pageable support automatically applied. Operations with x-spring-paginated explicitly set to false will not be auto-detected. Only applies when library=spring-boot.| |false| +|autoXSpringPaginated|Automatically add x-spring-paginated to operations that have 'page', 'size', and 'sort' query parameters. When enabled, operations with all three parameters will have Pageable support automatically applied. Operations with x-spring-paginated explicitly set to false will not be auto-detected. Only applies when library is spring-boot or spring-cloud.| |false| |basePackage|base package (invokerPackage) for generated code| |org.openapitools| |bigDecimalAsString|Treat BigDecimal values as Strings to avoid precision loss.| |false| |booleanGetterPrefix|Set booleanGetterPrefix| |get| @@ -57,8 +57,10 @@ These options may be applied as additional-properties (cli) or configOptions (pl |generateBuilders|Whether to generate builders for models| |false| |generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false| |generateGenericResponseEntity|Use a generic type for the `ResponseEntity` wrapping return values of generated API methods. If enabled, method are generated with return type ResponseEntity<?>| |false| -|generatePageableConstraintValidation|Generate a @ValidPageable annotation and PageableConstraintValidator class, and apply @ValidPageable to the injected Pageable parameter of operations whose 'page' or 'size' parameter specifies a maximum constraint. The annotation enforces those constraints on the Pageable object that replaces the individual page/size query parameters. Requires useBeanValidation=true and library=spring-boot.| |false| -|generateSortValidation|Generate a @ValidSort annotation and SortValidator class, and apply @ValidSort to the injected Pageable parameter of operations whose 'sort' parameter has enum values. The annotation validates that sort values in the Pageable object match the allowed enum values from the spec. Requires useBeanValidation=true and library=spring-boot.| |false| +|generateJsonIncludeAnnotations|Whether to generate policy @JsonInclude annotations on model properties. When true, emits spec-honest annotations (required-field protection and the optional non-nullable policy from optionalNonNullPropertyJsonInclude). When false, none are generated and the global ObjectMapper owns inclusion. When left unset it defaults to false (7.23.0-equivalent output) and logs a warning; set it explicitly to silence the warning. A per-property override set via the `x-jackson-json-include-policy` vendor extension is always honored regardless of this flag.| |false| +|generateJsonSetterNullsAnnotations|Whether to generate @JsonSetter(nulls = ...) annotations on optional non-nullable model properties. When true, emits @JsonSetter so an explicit null in the payload does not overwrite the field. When false, none are generated and deserialization null-handling defers to the global ObjectMapper. When left unset it defaults to false (7.23.0-equivalent output) and logs a warning; set it explicitly to silence the warning.| |false| +|generatePageableConstraintValidation|Generate a @ValidPageable annotation and PageableConstraintValidator class, and apply @ValidPageable to the injected Pageable parameter of operations whose 'page' or 'size' parameter specifies a maximum constraint. The annotation enforces those constraints on the Pageable object that replaces the individual page/size query parameters. Requires useBeanValidation=true and library is spring-boot or spring-cloud.| |false| +|generateSortValidation|Generate a @ValidSort annotation and SortValidator class, and apply @ValidSort to the injected Pageable parameter of operations whose 'sort' parameter has enum values. The annotation validates that sort values in the Pageable object match the allowed enum values from the spec. Requires useBeanValidation=true and library is spring-boot or spring-cloud.| |false| |generatedConstructorWithRequiredArgs|Whether to generate constructors with required args for models| |true| |groupId|groupId in generated pom.xml| |org.openapitools| |hateoas|Use Spring HATEOAS library to allow adding HATEOAS links| |false| @@ -76,7 +78,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPackage|package for generated models| |org.openapitools.model| |openApiNullable|Enable OpenAPI Jackson Nullable library. Not supported by `microprofile` library.| |true| |optionalAcceptNullable|Use `ofNullable` instead of just `of` to accept null values when using Optional.| |true| -|optionalGettersForNullableFieldsOnly|Make getters of non-required fields return Optional<T> while keeping the field and setter as the raw type. Supported libraries: restclient, resttemplate, webclient (java generator) and spring (spring generator). Opt-in, disabled by default.| |false| +|optionalNonNullPropertyJsonInclude|The Jackson @JsonInclude policy emitted for optional, non-nullable model properties when generateJsonIncludeAnnotations is true. NONE emits no annotation, deferring fully to the global ObjectMapper inclusion policy.|
    **NON_NULL**
    Omit the property when its value is null (default, spec-safe for non-nullable fields).
    **NON_EMPTY**
    Omit the property when its value is null or considered empty.
    **NON_DEFAULT**
    Omit the property when its value equals the default.
    **NONE**
    Emit no @JsonInclude annotation; defer to the global ObjectMapper.
    |NON_NULL| +|optionalNonNullPropertyJsonSetterNulls|The Jackson @JsonSetter(nulls = ...) mode emitted for optional, non-nullable model properties when generateJsonSetterNullsAnnotations is true. SKIP ignores an explicit JSON null (keeping the field's default), FAIL rejects it. When left unset the mode is derived from openApiNullable (true -> FAIL where supported, false -> SKIP), preserving 7.24.x behavior. A per-property override set via the `x-jackson-json-setter-nulls` vendor extension always wins.|
    **SKIP**
    Emit @JsonSetter(nulls = Nulls.SKIP): silently ignore an explicit JSON null, keeping the field's default.
    **FAIL**
    Emit @JsonSetter(nulls = Nulls.FAIL): reject an explicit JSON null.
    |null| |parentArtifactId|parent artifactId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentGroupId|parent groupId in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| |parentVersion|parent version in generated pom N.B. parentGroupId, parentArtifactId and parentVersion must all be specified for any of them to take effect| |null| @@ -99,6 +102,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |sourceFolder|source folder for generated code| |src/main/java| |springApiVersion|Value for 'version' attribute in @RequestMapping (for Spring 7 and above).| |null| +|springSecurityAuthorityPrefix|Prefix added to OAuth2/OpenID Connect scopes when generating Spring Security authorities.| |SCOPE_| |substituteGenericPagedModel|Detect schemas that represent paginated responses (an object with a 'content' array property and a 'page' pagination-metadata property) and replace their generated references with PagedModel<T>. By default this uses a generated type in the config package (default 'org.openapitools.configuration'), but `importMappings.PagedModel` can override it to a custom/FQCN-mapped type. The detected page schemas and the pagination metadata schema are suppressed from code generation.| |false| |testOutput|Set output folder for models and APIs tests| |${project.build.directory}/generated-test-sources/openapi| |title|server title name or client service name| |OpenAPI Spring| @@ -121,6 +125,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |useSpringBoot4|Generate code and provide dependencies for use with Spring Boot 4.x. (Use jakarta instead of javax in imports). Enabling this option will also enable `useJakartaEe`.| |false| |useSpringBuiltInValidation|Disable `@Validated` at the class level when using built-in validation.| |false| |useSpringController|Annotate the generated API as a Spring Controller| |false| +|useSpringSecurityPreAuthorize|Generate Spring Security @PreAuthorize annotations from OAuth2/OpenID Connect security scopes.| |false| |useSwaggerUI|Open the OpenApi specification in swagger-ui. Will also import and configure needed dependencies| |true| |useTags|use tags for creating interface and controller classnames| |false| |virtualService|Generates the virtual service. For more details refer - https://github.com/virtualansoftware/virtualan/wiki| |false| @@ -140,13 +145,15 @@ These options may be applied as additional-properties (cli) or configOptions (pl |x-class-extra-annotation|Custom annotation(s) to be added to model; accepts a string or list of strings|MODEL|null |x-field-extra-annotation|Custom annotation(s) to be added to property; accepts a string or list of strings|FIELD, OPERATION_PARAMETER|null |x-operation-extra-annotation|Custom annotation(s) to be added to operation; accepts a string or list of strings|OPERATION|null -|x-spring-paginated|Add `org.springframework.data.domain.Pageable` to controller method. Can be used to handle `page`, `size` and `sort` query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the `Pageable` object. Only applies when `library=spring-boot`; ignored for client libraries (spring-cloud, spring-declarative-http-interface).|OPERATION|false +|x-spring-paginated|Add `org.springframework.data.domain.Pageable` to controller method. Can be used to handle `page`, `size` and `sort` query parameters. If these query parameters are also specified in the operation spec, they will be removed from the controller method as their values can be obtained from the `Pageable` object. Applies when `library=spring-boot` or `library=spring-cloud`; ignored for other (client) libraries.|OPERATION|false |x-version-param|Marker property that tells that this parameter would be used for endpoint versioning. Applicable for headers & query params. true/false|OPERATION_PARAMETER|null |x-pattern-message|Add this property whenever you need to customize the invalidation error message for the regex pattern of a variable|FIELD, OPERATION_PARAMETER|null |x-size-message|Add this property whenever you need to customize the invalidation error message for the size or length of a variable|FIELD, OPERATION_PARAMETER|null |x-minimum-message|Add this property whenever you need to customize the invalidation error message for the minimum value of a variable|FIELD, OPERATION_PARAMETER|null |x-maximum-message|Add this property whenever you need to customize the invalidation error message for the maximum value of a variable|FIELD, OPERATION_PARAMETER|null |x-spring-api-version|Value for 'version' attribute in @RequestMapping (for Spring 7 and above).|OPERATION|null +|x-jackson-json-include-policy|Manually override the resolved Jackson `@JsonInclude` policy for this property. Must be one of `ALWAYS`, `NON_NULL`, `NON_ABSENT`, `NON_EMPTY`, `NON_DEFAULT`, `USE_DEFAULTS`, `CUSTOM`, or `NONE` to emit no annotation. Always wins over the automatic required/nullable matrix and the `optionalNonNullPropertyJsonInclude` option.|FIELD|resolved automatically per the required/nullable matrix +|x-jackson-json-setter-nulls|Manually override the resolved Jackson `@JsonSetter(nulls = ...)` deserialization null-handling for this property. Must be one of `SKIP` (ignore an explicit JSON null, keeping the default), `FAIL` (reject an explicit JSON null), or `NONE` to emit no annotation. Always wins over the automatic `openApiNullable` default and the `optionalNonNullPropertyJsonSetterNulls` option, and is honored regardless of `generateJsonSetterNullsAnnotations` or whether the property is required/nullable.|FIELD|resolved automatically per the openApiNullable default ## IMPORT MAPPING diff --git a/docs/generators/typescript-angular.md b/docs/generators/typescript-angular.md index 1b3d1fb87e38..e3a8ba54e386 100644 --- a/docs/generators/typescript-angular.md +++ b/docs/generators/typescript-angular.md @@ -11,7 +11,7 @@ title: Documentation for the typescript-angular Generator | generator type | CLIENT | | | generator language | Typescript | | | generator default templating engine | mustache | | -| helpTxt | Generates a TypeScript Angular (9.x - 21.x) client library. | | +| helpTxt | Generates a TypeScript Angular (9.x - 22.x) client library. | | ## CONFIG OPTIONS These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. @@ -34,7 +34,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |modelPropertyNaming|Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name. Only change it if you provide your own run-time code for (de-)serialization of models| |original| |modelSuffix|The suffix of the generated model.| |null| |ngPackagrVersion|The version of ng-packagr compatible with Angular (see ngVersion option).| |null| -|ngVersion|The version of Angular. (At least 9.0.0)| |21.0.0| +|ngVersion|The version of Angular. (At least 9.0.0)| |22.0.0| |npmName|The name under which you want to publish generated npm package. Required to generate a full package| |null| |npmRepository|Use this property to set an url your private npmRepo in the package.json| |null| |npmVersion|The version of your npm package. If not provided, using the version from the OpenAPI specification file.| |1.0.0| diff --git a/docs/generators/typescript-axios.md b/docs/generators/typescript-axios.md index 5b06ed9e205d..09cb16e27759 100644 --- a/docs/generators/typescript-axios.md +++ b/docs/generators/typescript-axios.md @@ -20,7 +20,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| |apiPackage|package for generated api classes| |null| -|axiosVersion|Use this property to override the axios version in package.json| |^1.16.0| +|axiosVersion|Use this property to override the axios version in package.json| |^1.18.0| |disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |enumNameSuffix|Suffix that will be appended to all enum names.| |Enum| diff --git a/docs/generators/typescript-fetch.md b/docs/generators/typescript-fetch.md index 37762fabc0d9..a51cfe50c40d 100644 --- a/docs/generators/typescript-fetch.md +++ b/docs/generators/typescript-fetch.md @@ -19,6 +19,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl | Option | Description | Values | Default | | ------ | ----------- | ------ | ------- | |allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| +|dateLibrary|Option. Date library to use.|
    **date**
    Native Date. `format: date` and `format: date-time` are both mapped to Date and (de)serialized by the runtime.
    **string**
    Plain string. Values are passed through untouched, leaving date handling to the consumer.
    |date| |disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |enumNameSuffix|Suffix that will be appended to all enum names.| |Enum| From cc5a645c4916e5e8d5e718c77c850af52a6d3ba5 Mon Sep 17 00:00:00 2001 From: Jorge Date: Thu, 3 Sep 2026 12:23:37 +0200 Subject: [PATCH 14/15] refactor: remove insecure TLS certificate validation method from ApiClient --- docs/generators/java-microprofile.md | 1 - docs/generators/java.md | 1 - .../org/openapitools/client/ApiClient.java | 40 ------------------- .../org/openapitools/client/ApiClient.java | 40 ------------------- .../org/openapitools/client/ApiClient.java | 40 ------------------- .../org/openapitools/client/ApiClient.java | 40 ------------------- .../org/openapitools/client/ApiClient.java | 40 ------------------- .../org/openapitools/client/ApiClient.java | 40 ------------------- .../org/openapitools/client/ApiClient.java | 40 ------------------- .../.openapi-generator/FILES | 6 --- .../.openapi-generator/FILES | 6 --- .../.openapi-generator/FILES | 6 --- .../org/openapitools/client/ApiClient.java | 40 ------------------- .../org/openapitools/client/ApiClient.java | 40 ------------------- .../org/openapitools/client/ApiClient.java | 40 ------------------- .../org/openapitools/client/ApiClient.java | 40 ------------------- .../org/openapitools/client/ApiClient.java | 40 ------------------- 17 files changed, 500 deletions(-) diff --git a/docs/generators/java-microprofile.md b/docs/generators/java-microprofile.md index 6ee156c99dab..2dfaf5e0bcf4 100644 --- a/docs/generators/java-microprofile.md +++ b/docs/generators/java-microprofile.md @@ -56,7 +56,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |generateBuilders|Whether to generate builders for models| |false| |generateClientAsBean|For resttemplate, restclient and webclient, configure whether to create `ApiClient.java` and Apis clients as bean (with `@Component` annotation).| |false| |generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false| -|generateInsecureTlsHook|Generate the ApiClient.disableCertificateValidation hook, which trusts all TLS certificates (default to true). Set to false to omit it, e.g. when static analysis flags the trust-all TrustManager it contains. Available on `jersey2`, `jersey3` libraries.| |true| |gradleProperties|Append additional Gradle properties to the gradle.properties file| |null| |groupId|groupId in generated pom.xml| |org.openapitools| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |false| diff --git a/docs/generators/java.md b/docs/generators/java.md index 3cee431791da..6740780102b9 100644 --- a/docs/generators/java.md +++ b/docs/generators/java.md @@ -56,7 +56,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |generateBuilders|Whether to generate builders for models| |false| |generateClientAsBean|For resttemplate, restclient and webclient, configure whether to create `ApiClient.java` and Apis clients as bean (with `@Component` annotation).| |false| |generateConstructorWithAllArgs|whether to generate a constructor for all arguments| |false| -|generateInsecureTlsHook|Generate the ApiClient.disableCertificateValidation hook, which trusts all TLS certificates (default to true). Set to false to omit it, e.g. when static analysis flags the trust-all TrustManager it contains. Available on `jersey2`, `jersey3` libraries.| |true| |gradleProperties|Append additional Gradle properties to the gradle.properties file| |null| |groupId|groupId in generated pom.xml| |org.openapitools| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |false| diff --git a/samples/client/others/java/jersey2-oneOf-Mixed/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/others/java/jersey2-oneOf-Mixed/src/main/java/org/openapitools/client/ApiClient.java index 237daa77ba0d..bf655db7c283 100644 --- a/samples/client/others/java/jersey2-oneOf-Mixed/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/others/java/jersey2-oneOf-Mixed/src/main/java/org/openapitools/client/ApiClient.java @@ -37,13 +37,6 @@ import java.io.InputStream; import java.net.URI; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @@ -1192,45 +1185,12 @@ protected void applyDebugSetting(ClientConfig clientConfig) { * server endpoints from web targets created by the client instance that is using this SSL context. * 4. Set the client-side trust store. * - * To completely disable certificate validation (at your own risk), you can - * override this method and invoke disableCertificateValidation(clientBuilder). - * * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. */ protected void customizeClientBuilder(ClientBuilder clientBuilder) { // No-op extension point } - /** - * Disable X.509 certificate validation in TLS connections. - * - * Please note that trusting all certificates is extremely risky. - * This may be useful in a development environment with self-signed certificates. - * - * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. - * @throws java.security.KeyManagementException if any. - * @throws java.security.NoSuchAlgorithmException if any. - */ - protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { - TrustManager[] trustAllCerts = new X509TrustManager[] { - new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new SecureRandom()); - clientBuilder.sslContext(sslContext); - } - /** *

    Build the response headers.

    * diff --git a/samples/client/others/java/jersey2-oneOf-duplicates/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/others/java/jersey2-oneOf-duplicates/src/main/java/org/openapitools/client/ApiClient.java index 237daa77ba0d..bf655db7c283 100644 --- a/samples/client/others/java/jersey2-oneOf-duplicates/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/others/java/jersey2-oneOf-duplicates/src/main/java/org/openapitools/client/ApiClient.java @@ -37,13 +37,6 @@ import java.io.InputStream; import java.net.URI; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @@ -1192,45 +1185,12 @@ protected void applyDebugSetting(ClientConfig clientConfig) { * server endpoints from web targets created by the client instance that is using this SSL context. * 4. Set the client-side trust store. * - * To completely disable certificate validation (at your own risk), you can - * override this method and invoke disableCertificateValidation(clientBuilder). - * * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. */ protected void customizeClientBuilder(ClientBuilder clientBuilder) { // No-op extension point } - /** - * Disable X.509 certificate validation in TLS connections. - * - * Please note that trusting all certificates is extremely risky. - * This may be useful in a development environment with self-signed certificates. - * - * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. - * @throws java.security.KeyManagementException if any. - * @throws java.security.NoSuchAlgorithmException if any. - */ - protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { - TrustManager[] trustAllCerts = new X509TrustManager[] { - new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new SecureRandom()); - clientBuilder.sslContext(sslContext); - } - /** *

    Build the response headers.

    * diff --git a/samples/client/petstore/java/jersey2-java8-localdatetime/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/jersey2-java8-localdatetime/src/main/java/org/openapitools/client/ApiClient.java index 955d1245d243..085207597503 100644 --- a/samples/client/petstore/java/jersey2-java8-localdatetime/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/jersey2-java8-localdatetime/src/main/java/org/openapitools/client/ApiClient.java @@ -38,13 +38,6 @@ import java.io.InputStream; import java.net.URI; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @@ -1349,45 +1342,12 @@ protected void applyDebugSetting(ClientConfig clientConfig) { * server endpoints from web targets created by the client instance that is using this SSL context. * 4. Set the client-side trust store. * - * To completely disable certificate validation (at your own risk), you can - * override this method and invoke disableCertificateValidation(clientBuilder). - * * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. */ protected void customizeClientBuilder(ClientBuilder clientBuilder) { // No-op extension point } - /** - * Disable X.509 certificate validation in TLS connections. - * - * Please note that trusting all certificates is extremely risky. - * This may be useful in a development environment with self-signed certificates. - * - * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. - * @throws java.security.KeyManagementException if any. - * @throws java.security.NoSuchAlgorithmException if any. - */ - protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { - TrustManager[] trustAllCerts = new X509TrustManager[] { - new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new SecureRandom()); - clientBuilder.sslContext(sslContext); - } - /** *

    Build the response headers.

    * diff --git a/samples/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/ApiClient.java index 955d1245d243..085207597503 100644 --- a/samples/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/ApiClient.java @@ -38,13 +38,6 @@ import java.io.InputStream; import java.net.URI; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @@ -1349,45 +1342,12 @@ protected void applyDebugSetting(ClientConfig clientConfig) { * server endpoints from web targets created by the client instance that is using this SSL context. * 4. Set the client-side trust store. * - * To completely disable certificate validation (at your own risk), you can - * override this method and invoke disableCertificateValidation(clientBuilder). - * * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. */ protected void customizeClientBuilder(ClientBuilder clientBuilder) { // No-op extension point } - /** - * Disable X.509 certificate validation in TLS connections. - * - * Please note that trusting all certificates is extremely risky. - * This may be useful in a development environment with self-signed certificates. - * - * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. - * @throws java.security.KeyManagementException if any. - * @throws java.security.NoSuchAlgorithmException if any. - */ - protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { - TrustManager[] trustAllCerts = new X509TrustManager[] { - new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new SecureRandom()); - clientBuilder.sslContext(sslContext); - } - /** *

    Build the response headers.

    * diff --git a/samples/client/petstore/java/jersey3-jackson3/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/jersey3-jackson3/src/main/java/org/openapitools/client/ApiClient.java index fd7c7162bb4f..0c3e17ccd810 100644 --- a/samples/client/petstore/java/jersey3-jackson3/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/jersey3-jackson3/src/main/java/org/openapitools/client/ApiClient.java @@ -38,13 +38,6 @@ import java.io.InputStream; import java.net.URI; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @@ -1461,45 +1454,12 @@ protected void applyDebugSetting(ClientConfig clientConfig) { * server endpoints from web targets created by the client instance that is using this SSL context. * 4. Set the client-side trust store. * - * To completely disable certificate validation (at your own risk), you can - * override this method and invoke disableCertificateValidation(clientBuilder). - * * @param clientBuilder a {@link jakarta.ws.rs.client.ClientBuilder} object. */ protected void customizeClientBuilder(ClientBuilder clientBuilder) { // No-op extension point } - /** - * Disable X.509 certificate validation in TLS connections. - * - * Please note that trusting all certificates is extremely risky. - * This may be useful in a development environment with self-signed certificates. - * - * @param clientBuilder a {@link jakarta.ws.rs.client.ClientBuilder} object. - * @throws java.security.KeyManagementException if any. - * @throws java.security.NoSuchAlgorithmException if any. - */ - protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { - TrustManager[] trustAllCerts = new X509TrustManager[] { - new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new SecureRandom()); - clientBuilder.sslContext(sslContext); - } - /** *

    Build the response headers.

    * diff --git a/samples/client/petstore/java/jersey3-oneOf/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/jersey3-oneOf/src/main/java/org/openapitools/client/ApiClient.java index c5d91a56264c..a500064348f7 100644 --- a/samples/client/petstore/java/jersey3-oneOf/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/jersey3-oneOf/src/main/java/org/openapitools/client/ApiClient.java @@ -37,13 +37,6 @@ import java.io.InputStream; import java.net.URI; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @@ -1222,45 +1215,12 @@ protected void applyDebugSetting(ClientConfig clientConfig) { * server endpoints from web targets created by the client instance that is using this SSL context. * 4. Set the client-side trust store. * - * To completely disable certificate validation (at your own risk), you can - * override this method and invoke disableCertificateValidation(clientBuilder). - * * @param clientBuilder a {@link jakarta.ws.rs.client.ClientBuilder} object. */ protected void customizeClientBuilder(ClientBuilder clientBuilder) { // No-op extension point } - /** - * Disable X.509 certificate validation in TLS connections. - * - * Please note that trusting all certificates is extremely risky. - * This may be useful in a development environment with self-signed certificates. - * - * @param clientBuilder a {@link jakarta.ws.rs.client.ClientBuilder} object. - * @throws java.security.KeyManagementException if any. - * @throws java.security.NoSuchAlgorithmException if any. - */ - protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { - TrustManager[] trustAllCerts = new X509TrustManager[] { - new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new SecureRandom()); - clientBuilder.sslContext(sslContext); - } - /** *

    Build the response headers.

    * diff --git a/samples/client/petstore/java/jersey3/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/jersey3/src/main/java/org/openapitools/client/ApiClient.java index 79fb2a727f9f..6cd3a436cce6 100644 --- a/samples/client/petstore/java/jersey3/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/jersey3/src/main/java/org/openapitools/client/ApiClient.java @@ -38,13 +38,6 @@ import java.io.InputStream; import java.net.URI; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @@ -1461,45 +1454,12 @@ protected void applyDebugSetting(ClientConfig clientConfig) { * server endpoints from web targets created by the client instance that is using this SSL context. * 4. Set the client-side trust store. * - * To completely disable certificate validation (at your own risk), you can - * override this method and invoke disableCertificateValidation(clientBuilder). - * * @param clientBuilder a {@link jakarta.ws.rs.client.ClientBuilder} object. */ protected void customizeClientBuilder(ClientBuilder clientBuilder) { // No-op extension point } - /** - * Disable X.509 certificate validation in TLS connections. - * - * Please note that trusting all certificates is extremely risky. - * This may be useful in a development environment with self-signed certificates. - * - * @param clientBuilder a {@link jakarta.ws.rs.client.ClientBuilder} object. - * @throws java.security.KeyManagementException if any. - * @throws java.security.NoSuchAlgorithmException if any. - */ - protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { - TrustManager[] trustAllCerts = new X509TrustManager[] { - new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new SecureRandom()); - clientBuilder.sslContext(sslContext); - } - /** *

    Build the response headers.

    * diff --git a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES index 05a21f4fc138..a9762735bc0b 100644 --- a/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES +++ b/samples/client/petstore/java/restclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES @@ -42,9 +42,3 @@ src/main/java/org/openapitools/client/model/Foo.java src/main/java/org/openapitools/client/model/RequiredAndNullable.java src/main/java/org/openapitools/client/model/package-info.java src/main/java/org/openapitools/client/package-info.java -src/test/java/org/openapitools/client/api/FileApiTest.java -src/test/java/org/openapitools/client/api/FooApiTest.java -src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java -src/test/java/org/openapitools/client/api/UploadApiTest.java -src/test/java/org/openapitools/client/model/FileContentTest.java -src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java diff --git a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES index 21d24a429a38..61311fa8a555 100644 --- a/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES +++ b/samples/client/petstore/java/resttemplate-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES @@ -43,9 +43,3 @@ src/main/java/org/openapitools/client/model/Foo.java src/main/java/org/openapitools/client/model/RequiredAndNullable.java src/main/java/org/openapitools/client/model/package-info.java src/main/java/org/openapitools/client/package-info.java -src/test/java/org/openapitools/client/api/FileApiTest.java -src/test/java/org/openapitools/client/api/FooApiTest.java -src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java -src/test/java/org/openapitools/client/api/UploadApiTest.java -src/test/java/org/openapitools/client/model/FileContentTest.java -src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java diff --git a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES index d7667aca8ee0..821db0873c19 100644 --- a/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES +++ b/samples/client/petstore/java/webclient-springBoot4-jackson3-jspecify-optional-getters/.openapi-generator/FILES @@ -44,9 +44,3 @@ src/main/java/org/openapitools/client/model/Foo.java src/main/java/org/openapitools/client/model/RequiredAndNullable.java src/main/java/org/openapitools/client/model/package-info.java src/main/java/org/openapitools/client/package-info.java -src/test/java/org/openapitools/client/api/FileApiTest.java -src/test/java/org/openapitools/client/api/FooApiTest.java -src/test/java/org/openapitools/client/api/RequiredAndNullableApiTest.java -src/test/java/org/openapitools/client/api/UploadApiTest.java -src/test/java/org/openapitools/client/model/FileContentTest.java -src/test/java/org/openapitools/client/model/RequiredAndNullableTest.java diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/src/main/java/org/openapitools/client/ApiClient.java b/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/src/main/java/org/openapitools/client/ApiClient.java index 489d7cfd6fd9..c5f196cf875e 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/src/main/java/org/openapitools/client/ApiClient.java @@ -37,13 +37,6 @@ import java.io.InputStream; import java.net.URI; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @@ -1241,45 +1234,12 @@ protected void applyDebugSetting(ClientConfig clientConfig) { * server endpoints from web targets created by the client instance that is using this SSL context. * 4. Set the client-side trust store. * - * To completely disable certificate validation (at your own risk), you can - * override this method and invoke disableCertificateValidation(clientBuilder). - * * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. */ protected void customizeClientBuilder(ClientBuilder clientBuilder) { // No-op extension point } - /** - * Disable X.509 certificate validation in TLS connections. - * - * Please note that trusting all certificates is extremely risky. - * This may be useful in a development environment with self-signed certificates. - * - * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. - * @throws java.security.KeyManagementException if any. - * @throws java.security.NoSuchAlgorithmException if any. - */ - protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { - TrustManager[] trustAllCerts = new X509TrustManager[] { - new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new SecureRandom()); - clientBuilder.sslContext(sslContext); - } - /** *

    Build the response headers.

    * diff --git a/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/src/main/java/org/openapitools/client/ApiClient.java b/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/src/main/java/org/openapitools/client/ApiClient.java index 30b01c1c7fdc..1120c77ea352 100644 --- a/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/src/main/java/org/openapitools/client/ApiClient.java @@ -37,13 +37,6 @@ import java.io.InputStream; import java.net.URI; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @@ -1192,45 +1185,12 @@ protected void applyDebugSetting(ClientConfig clientConfig) { * server endpoints from web targets created by the client instance that is using this SSL context. * 4. Set the client-side trust store. * - * To completely disable certificate validation (at your own risk), you can - * override this method and invoke disableCertificateValidation(clientBuilder). - * * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. */ protected void customizeClientBuilder(ClientBuilder clientBuilder) { // No-op extension point } - /** - * Disable X.509 certificate validation in TLS connections. - * - * Please note that trusting all certificates is extremely risky. - * This may be useful in a development environment with self-signed certificates. - * - * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. - * @throws java.security.KeyManagementException if any. - * @throws java.security.NoSuchAlgorithmException if any. - */ - protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { - TrustManager[] trustAllCerts = new X509TrustManager[] { - new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new SecureRandom()); - clientBuilder.sslContext(sslContext); - } - /** *

    Build the response headers.

    * diff --git a/samples/openapi3/client/petstore/java/jersey2-java8-swagger1/src/main/java/org/openapitools/client/ApiClient.java b/samples/openapi3/client/petstore/java/jersey2-java8-swagger1/src/main/java/org/openapitools/client/ApiClient.java index 813900e1b2c8..17dc7aec626e 100644 --- a/samples/openapi3/client/petstore/java/jersey2-java8-swagger1/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/openapi3/client/petstore/java/jersey2-java8-swagger1/src/main/java/org/openapitools/client/ApiClient.java @@ -38,13 +38,6 @@ import java.io.InputStream; import java.net.URI; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @@ -1333,45 +1326,12 @@ protected void applyDebugSetting(ClientConfig clientConfig) { * server endpoints from web targets created by the client instance that is using this SSL context. * 4. Set the client-side trust store. * - * To completely disable certificate validation (at your own risk), you can - * override this method and invoke disableCertificateValidation(clientBuilder). - * * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. */ protected void customizeClientBuilder(ClientBuilder clientBuilder) { // No-op extension point } - /** - * Disable X.509 certificate validation in TLS connections. - * - * Please note that trusting all certificates is extremely risky. - * This may be useful in a development environment with self-signed certificates. - * - * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. - * @throws java.security.KeyManagementException if any. - * @throws java.security.NoSuchAlgorithmException if any. - */ - protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { - TrustManager[] trustAllCerts = new X509TrustManager[] { - new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new SecureRandom()); - clientBuilder.sslContext(sslContext); - } - /** *

    Build the response headers.

    * diff --git a/samples/openapi3/client/petstore/java/jersey2-java8-swagger2/src/main/java/org/openapitools/client/ApiClient.java b/samples/openapi3/client/petstore/java/jersey2-java8-swagger2/src/main/java/org/openapitools/client/ApiClient.java index 813900e1b2c8..17dc7aec626e 100644 --- a/samples/openapi3/client/petstore/java/jersey2-java8-swagger2/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/openapi3/client/petstore/java/jersey2-java8-swagger2/src/main/java/org/openapitools/client/ApiClient.java @@ -38,13 +38,6 @@ import java.io.InputStream; import java.net.URI; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @@ -1333,45 +1326,12 @@ protected void applyDebugSetting(ClientConfig clientConfig) { * server endpoints from web targets created by the client instance that is using this SSL context. * 4. Set the client-side trust store. * - * To completely disable certificate validation (at your own risk), you can - * override this method and invoke disableCertificateValidation(clientBuilder). - * * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. */ protected void customizeClientBuilder(ClientBuilder clientBuilder) { // No-op extension point } - /** - * Disable X.509 certificate validation in TLS connections. - * - * Please note that trusting all certificates is extremely risky. - * This may be useful in a development environment with self-signed certificates. - * - * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. - * @throws java.security.KeyManagementException if any. - * @throws java.security.NoSuchAlgorithmException if any. - */ - protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { - TrustManager[] trustAllCerts = new X509TrustManager[] { - new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new SecureRandom()); - clientBuilder.sslContext(sslContext); - } - /** *

    Build the response headers.

    * diff --git a/samples/openapi3/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/ApiClient.java b/samples/openapi3/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/ApiClient.java index 28defd66ffb5..f1705a2591cb 100644 --- a/samples/openapi3/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/openapi3/client/petstore/java/jersey2-java8/src/main/java/org/openapitools/client/ApiClient.java @@ -38,13 +38,6 @@ import java.io.InputStream; import java.net.URI; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import java.security.cert.X509Certificate; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; @@ -1431,45 +1424,12 @@ protected void applyDebugSetting(ClientConfig clientConfig) { * server endpoints from web targets created by the client instance that is using this SSL context. * 4. Set the client-side trust store. * - * To completely disable certificate validation (at your own risk), you can - * override this method and invoke disableCertificateValidation(clientBuilder). - * * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. */ protected void customizeClientBuilder(ClientBuilder clientBuilder) { // No-op extension point } - /** - * Disable X.509 certificate validation in TLS connections. - * - * Please note that trusting all certificates is extremely risky. - * This may be useful in a development environment with self-signed certificates. - * - * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object. - * @throws java.security.KeyManagementException if any. - * @throws java.security.NoSuchAlgorithmException if any. - */ - protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { - TrustManager[] trustAllCerts = new X509TrustManager[] { - new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } - }; - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, new SecureRandom()); - clientBuilder.sslContext(sslContext); - } - /** *

    Build the response headers.

    * From 4784547b7986e6a5ffaa45d5bc619c10c145ebc6 Mon Sep 17 00:00:00 2001 From: Jorge Date: Thu, 3 Sep 2026 13:35:58 +0200 Subject: [PATCH 15/15] docs: update elixir documentation for library option --- docs/generators/elixir.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/generators/elixir.md b/docs/generators/elixir.md index d7009619ab26..f235da179c5a 100644 --- a/docs/generators/elixir.md +++ b/docs/generators/elixir.md @@ -24,7 +24,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |enumUnknownDefaultCase|If the server adds new enum cases, that are unknown by an old spec/client, the client will fail to parse the network response. With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the server sends an enum case that is not known by the client/spec, they can safely fallback to this case.|
    **false**
    No changes to the enums are made, this is the default option.
    **true**
    With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the enum case sent by the server is not known by the client/spec, can safely be decoded to this case.
    |false| |invokerPackage|The main namespace to use for all classes. e.g. Yay.Pets| |null| |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|HTTP library template (sub-template) to use|
    **tesla**
    Tesla >= 1.14 (https://github.com/elixir-tesla/tesla)
    **req**
    Req >= 0.6.0 (excluding 0.7.0-0.7.2) (https://github.com/wojtekmach/req)
    |tesla| |licenseHeader|The license header to prepend to the top of all source files.| |null| |packageName|Elixir package name (convention: lowercase).| |null| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false|