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

4zcjmb1e  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(139)

我有一个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代码。
这能以某种方式实现吗?

ru9i0ody

ru9i0ody1#

最后,我将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 + "'");
  }
}

相关问题