如何强制 Swagger Codegen 生成未从任何其他对象引用的枚举?

问题描述 投票:0回答:2

我有一个包含多个枚举的 OpenAPI 规范:

SocialLinkType:
  type: string
  enum:
    - FACEBOOK
    - YOUTUBE
    - INSTAGRAM
    - TWITTER
    - PINTEREST
    - LINKEDIN
    - TIKTOK
    - TUMBLR
    - WHATSAPP
    - VIMEO
    - SNAPCHAT
    - APPLE
    - ANDROID

ColorType:
  type: string
  enum:
    - ACCENT_1
    - ACCENT_2
    - BACKGROUND_1
    - BACKGROUND_2
    - TEXT
    - SOLID_BUTTON
    - OUTLINE_BUTTON

我面临的问题是关于

ColorType
。与
SocialLinkType
不同,它没有被 OpenAPI 规范中描述的任何其他组件引用。因此,
ColorType
未生成 Java 枚举,所以我的问题是强制 Swagger Codegen 为规范中的每个项目生成 Java 代码。

这可以通过某种方式实现吗?

java swagger openapi swagger-codegen openapi-generator
2个回答
2
投票

最后,我通过将

ColorType
的声明移动到顶级
components
部分解决了这个问题。 在修复之前,我在以下部分下只有
securitySchemes
声明:

components:
  securitySchemes:
    bearer:
      type: http
      scheme: bearer

我已经改成

components:
  schemas:
    ColorType:
      type: string
      enum:
        - ACCENT_1
        - ACCENT_2
        - BACKGROUND_1
        - BACKGROUND_2
        - TEXT
        - SOLID_BUTTON
        - OUTLINE_BUTTON
  securitySchemes:
    bearer:
      type: http
      scheme: bearer

这为我在生成的类中提供了所需的 Java 枚举:

public enum ColorType {
  ACCENT_1("ACCENT_1"),
  ACCENT_2("ACCENT_2"),
  BACKGROUND_1("BACKGROUND_1"),
  BACKGROUND_2("BACKGROUND_2"),
  TEXT("TEXT"), 
  SOLID_BUTTON("SOLID_BUTTON"),
  OUTLINE_BUTTON("OUTLINE_BUTTON");

  private String value;

  ColorType(String value) {
    this.value = value;
  }

  @Override
  @JsonValue
  public String toString() {
    return String.valueOf(value);
  }

  @JsonCreator
  public static ColorType fromValue(String value) {
    for (ColorType b : ColorType.values()) {
      if (b.value.equals(value)) {
        return b;
      }
    }
    throw new IllegalArgumentException("Unexpected value '" + value + "'");
  }
}

0
投票

一直在寻找一种获取 IllegalArgumentException 的方法,而不是从方法 fromValue 中返回“null”。 openapi 规范 v3.0.2 和 swagger-codegen-maven-plugin 版本:3.0.54 尚未成功。 我的情况可能缺少什么,有什么想法吗?

© www.soinside.com 2019 - 2024. All rights reserved.