swagger-api / swagger-api/swagger-codegen

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

Open
#12,666 2 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Bug
Dominant language
Mustache
Stars
17.8k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

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).

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the Maven plugin configuration, the OpenAPI 3.1 input JSON, and the generated Doctor.java after running mvn clean generate-sources. Trace the warning "String to be sanitized is null. Default to Object" and compare the generated property types with the schema; done means string, boolean, and integer properties are generated with matching Java types instead of Object.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
api, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.