【问题标题】:How to define enum values in String using Swagger Codegen如何使用 Swagger Codegen 在 String 中定义枚举值
【发布时间】:2019-01-28 17:26:28
【问题描述】:

我正在使用 SwaggerCodegen(2.3.1) 来生成我的 API 的客户端代码。我使用 enum 作为 YAML 定义文件的一部分,然后 Swagger 生成 java 文件。

random:
    enum:
    - A
    - B
    - C+
    - C-
    type: string

这个 yml 被转换为

  public enum Random{
    A("A"),
   B("B"),
   C_("C+"),
   C_("C-"); // compile time error..

private String value;
....}

有没有办法给我的枚举值命名,如下所示?

public enum Random{
A("A"),
B("B"),
CP("C+"),  
CM("C-"); 
}

【问题讨论】:

    标签: java spring swagger swagger-codegen


    【解决方案1】:

    特殊字符是对 swagger codegen 的限制,可能它们仍然不受支持,所以为了实现它,我必须在 yml 文件中添加一个新块

    random:
    enum:
    - A
    - B
    - C+
    - C-
    x-enum-names:
    - A
    - B
    - CP
    - CM
    type: string
    

    除此之外,我还要创建一个继承 JavaClientCodegen 的类并覆盖下面的方法,该方法将 C+ 替换为 CP

    class SwaggerCodegen : JavaClientCodegen() {
     override fun updateCodegenPropertyEnum(codegenProperty: CodegenProperty?) {
          super.updateCodegenPropertyEnum(codegenProperty)
          if (codegenProperty!!.vendorExtensions.containsKey( "x-enum-names" )) {
             val alterNames = codegenProperty.vendorExtensions["x-enum-names"] as List<String>
             val enums = codegenProperty.allowableValues.get("enumVars") as List<MutableMap<String, String>>
             if (alterNames.size != enums.size) {
                return
             }
             alterNames.forEachIndexed { index, element ->
                enums[index].put("name", element)
             }
          }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 2021-04-07
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多