Skip to content

[BUG][JavaSpring] Enum default value is only set if defined inline in schema #1981

@ajdergute

Description

@ajdergute

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • What's the version of OpenAPI Generator used? (3.3.4)
  • Have you search for related issues/PRs?
  • What's the actual output vs expected output?
  • [Optional] Bounty to sponsor the fix (example)
Description

Depending if an enum is specified inline or not a the specified default value is assigned (or not). If defined inline (first case) a default value is assigned, as expected. If the enum is referenced via $ref, then 'null' is assigned, which should be changed.

openapi-generator version

As far as i know it's not a regression and I use OpenAPI Generator Version 3.2.3 and 3.3.4.

OpenAPI declaration file content or url

in both cases:

paths:
  /testenum:
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TestObject'

works:

components:
  schemas:
    TestObject:
      type: object
      properties:
        myEnum:
          type: string
          default: FIRSTVALUE
          enum:
            - FIRSTVALUE
            - SECONDVALUE

and produces:

public class TestObjectDto {
  @JsonProperty("myEnum")
  private MyEnumEnum myEnum = MyEnumEnum.FIRSTVALUE;
}

doesn't work:

components:
  schemas:
    TestObject:
      type: object
      properties:
        myEnum:
          $ref: '#/components/schemas/MyEnum'
...
    MyEnum:
      type: string
      default: FIRSTVALUE
      enum:
      - FIRSTVALUE
      - SECONDVALUE

and produces:

public class TestObjectDto {
  @JsonProperty("myEnum")
  private MyEnumDto myEnum = null;
}
Command line used for generation

I used the maven generator plugin as follows:

            <plugin>
                <groupId>org.openapitools</groupId>
                <artifactId>openapi-generator-maven-plugin</artifactId>
                <version>3.3.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <phase>generate-sources</phase>
                        <configuration>
                            <inputSpec>src/main/resources/swagger/api.yaml</inputSpec>
                            <generatorName>spring</generatorName>
                            <invokerPackage>${project.groupId}.service</invokerPackage>
                            <apiPackage>${project.groupId}.service.api</apiPackage>
                            <modelPackage>${project.groupId}.service.model</modelPackage>
                            <modelNameSuffix>Dto</modelNameSuffix>
                            <configOptions>
                                <sourceFolder>src/main/java</sourceFolder>
                                <library>spring-boot</library>
                                <java8>true</java8>
                                <dateLibrary>java8</dateLibrary>
                                <useTags>true</useTags>
                                <interfaceOnly>true</interfaceOnly>
                                <delegatePattern>true</delegatePattern>
                                <swaggerDocketConfig>false</swaggerDocketConfig>
                                <configPackage>${project.groupId}.config</configPackage>
                            </configOptions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
Steps to reproduce

Create an enum as described and see if default value is assigned.

Related issues/PRs
Suggest a fix

The expected behaviour in second case should be an default value assigment of the enum class like so:
private MyEnumDto myEnum = MyEnumDto.FIRSTVALUE;

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions