如何使用Swagger Codegen在String中定义枚举值

时间:2018-08-22 12:35:53

标签: java spring swagger swagger-codegen

我正在使用SwaggerCodegen(2.3.1)生成我的API的客户端代码。我将枚举用作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-"); 
}

1 个答案:

答案 0 :(得分:2)

特殊字符是不可靠的代码生成的限制,可能仍不受支持,因此要实现它,我必须在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)
         }
      }
   }
}