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

标签 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-"); 
}

最佳答案

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

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)
         }
      }
   }
}

关于java - 如何使用 Swagger Codegen 在 String 中定义枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51967055/

相关文章:

java - 在 Eclipse 中使用 Google 代码格式化程序和 GWT

java - Spring MVC - Eclipse 警告 - 验证消息

java - 有没有一种简单的方法可以使 log4j 更小?

java - Spring 一对一关系

java - 从 tomcat 迁移到 JBoss AS7。 mvn jboss-as :deploy does not work on my maven project

java - Spring Security 拦截器 URL 不起作用

java - Swagger ApiModelProperty 不起作用

node.js - swagger-test 中没有请求正文

swagger - 如何在 Swagger 文档中显示 <remarks>

java - WAR 无法在 AWS 中的 jetty9 上启动,但可以在本地安装上运行