Skip to content

[Bug]: String and Boolean and Int properties are being turned into Objects in OpenAPI 3.1.0 #12666

@senahornby

Description

@senahornby

This is an issue specifically with OpenAPI Version 3.1.0. I am not having this issue with OpenAPI Version 3.0.X. My current workaround is to use OpenAPI 3.0.1.

I am using the Swagger Codegen Maven Plugin V3, version 3.0.71. I am using Java 21, Spring Boot 3.5.8. In my pom file I have the following configuration:

            <plugin>
                <groupId>io.swagger.codegen.v3</groupId>
                <artifactId>swagger-codegen-maven-plugin</artifactId>
                <version>3.0.71</version>
                <executions>
                    <execution>
                        <id>my-project</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.baseUri}/src/main/resources/myproject.json</inputSpec>
                            <language>java</language>
                            <library>resttemplate</library>
                            <generateApis>false</generateApis>
                            <modelPackage>com.my.project.model</modelPackage>
                            <generateApiTests>false</generateApiTests>
                            <generateApiDocumentation>false</generateApiDocumentation>
                            <generateModelTests>false</generateModelTests>
                            <generateModelDocumentation>false</generateModelDocumentation>
                            <generateSupportingFiles>false</generateSupportingFiles>
                            <configOptions>
                                <interfaceOnly>true</interfaceOnly>
                                <dateLibrary>legacy</dateLibrary>
                                <hideGenerationTimestamp>true</hideGenerationTimestamp>
                            </configOptions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

I am expecting the input JSON file to generate Java files that will match the json. However, upon running mvn clean generate-sources, I keep seeing the following warning: "[WARNING] String to be sanitized is null. Default to Object"

Here is an example of one of the objects in the JSON schema:

            "Doctor": {
                "type": "object",
                "properties": {
                    "code": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "practiceName": {
                        "type": "string"
                    },
                    "address1": {
                        "type": "string"
                    },
                    "address2": {
                        "type": "string"
                    },
                    "address3": {
                        "type": "string"
                    },
                    "postalCode": {
                        "type": "string"
                    },
                    "townCity": {
                        "type": "string"
                    },
                    "regionCounty": {
                        "type": "string"
                    },
                    "country": {
                        "type": "string"
                    },
                    "email": {
                        "type": "string"
                    },
                    "phoneNumber": {
                        "type": "string"
                    },
                    "approved": {
                        "type": "boolean"
                    },
                    "externalId": {
                        "type": "integer",
                        "format": "int32"
                    },
                    "languageTag": {
                        "type": "string"
                    }
                }
            }

Okay, so you'd think that would product a Java object with properties matching the types described (strings, booleans). Instead, in the resulting Java object, every single property is just an Object.

public class Doctor {
  @JsonProperty("code")
  private Object code = null;

  @JsonProperty("practiceName")
  private Object practiceName = null;

  @JsonProperty("address1")
  private Object address1 = null;

  @JsonProperty("address2")
  private Object address2 = null;

  @JsonProperty("address3")
  private Object address3 = null;

  @JsonProperty("postalCode")
  private Object postalCode = null;

  @JsonProperty("townCity")
  private Object townCity = null;

  @JsonProperty("regionCounty")
  private Object regionCounty = null;

  @JsonProperty("country")
  private Object country = null;

  @JsonProperty("email")
  private Object email = null;

  @JsonProperty("phoneNumber")
  private Object phoneNumber = null;

  @JsonProperty("approved")
  private Object approved = null;

  @JsonProperty("externalId")
  private Object externalVetId = null;

  @JsonProperty("languageTag")
  private Object languageTag = null;

  public Doctor code(Object code) {
    this.code = code;
    return this;
  }

I want the properties (i.e. practiceName, country, etc.) to actually match what the schema has (i.e. both practiceName and country should be Strings).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions